I have an activity with 3 tabs: A, B & C. For every tab, I’ve created a fragment (-f) and presenter (-p). The problem is that all three fragments (A-f, B-f, C-f) are the same, but presenters are not. So the question is how I can avoid code duplicity? I’ve tried to create a BaseFragment and extend it from A-f, B-f, C-f, but if I’m in A-f and something happens C-f (like UI update), then I receive
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setVisibility(int)' on a null object reference
, because C-f at this is destroyed (am I right?) I don't want to create 3 same fragments with the same layouts.
Asked
Active
Viewed 129 times
1

P. Savrov
- 1,064
- 4
- 17
- 29
1 Answers
1
I've done something similar and I've found using Views a lot simpler and less buggy. The android fragment managers can exhibit unpredictable behavior at times when executing various transactions. Here's a quick sample of how it can work:
YourActivity extends Activity {
View a,b,c;
@Override
protected void onCreate(Bundle savedInstanceState) {
a = getLayoutInflater().inflate(R.layout.YOUR_LAYOUT_ID, null);
b = getLayoutInflater().inflate(R.layout.YOUR_LAYOUT_ID, null);
c = getLayoutInflater().inflate(R.layout.YOUR_LAYOUT_ID, null);
}
}
The activity is the presenter / controller for android, so I would go ahead and have the logic here instead of defining a presenter class for now. On each tab press you could then control which view to show. I don't see the code in which your are performing fragment transition so I cannot comment for sure if your fragment was destroyed.

Nelson Hoang
- 413
- 2
- 11
-
thank you for option. For fragment transaction I use ViewPager. I'm not sure if using activity as a presenter is a good idea, I'll google it – P. Savrov Jul 28 '17 at 00:51
-
Fragments can work, but you'll get cases where you get a crash once in a blue moon and unfortunately there won't be a fix since you can't edit the android source. See https://stackoverflow.com/questions/18710561/can-i-use-view-pager-with-views-not-with-fragments for reference. In larger companies it makes sense to have lighter activites such as lyft as they've built out a MVC pattern https://github.com/lyft/scoop. For smaller projects I would highly recommend having your activities be the presenter / controller to bind data to views. – Nelson Hoang Jul 28 '17 at 01:01
-
In terms of MVC / MVP / MVVM though there is no "right" answer when it comes to architecture as expressed by Google engineer Dianne Hackborn https://plus.google.com/+DianneHackborn/posts/FXCCYxepsDU – Nelson Hoang Jul 28 '17 at 01:10