2017-07-28 83 views
0

我有一个活动带有3个选项卡:A,B & C.对于每个选项卡,我创建了一个片段(-f)和演示者(-p)。问题是所有三个片段(A-f,B-f,C-f)是相同的,但演示者不是。所以问题是我如何避免代码重复?我试图创建一个BaseFragment并从Af,Bf,Cf扩展它,但是如果我在Af并且发生了某些事情(比如UI更新),那么我会收到 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setVisibility(int)' on a null object reference,因为在此处的Cf被销毁(是I对吧?)我不想用相同的布局创建3个相同的片段。带有不同演示者的相同片段

回答

1

我做了类似的事情,我发现使用视图更简单和更少的错误。在执行各种事务时,android片段管理器可能会出现不可预知的行为。下面是它如何工作的一个快速的样品:

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); 
     } 
} 

活动是为Android演示/控制器,所以我会在这里,而不是继续和有逻辑定义现在演示类的。在每个标签页上,您可以控制显示哪个视图。我没有看到你正在执行片段转换的代码,所以我无法确定你的片段是否被破坏。

+0

感谢您的选择。对于片段事务,我使用ViewPager。我不知道如果使用活动作为主持人是一个好主意,我会谷歌它 –

+0

片段可以工作,但你会得到的情况下,你在蓝色月亮一旦崩溃,不幸的是不会有一个修复,因为你不能编辑android源代码。请参阅https://stackoverflow.com/questions/18710561/can-i-use-view-pager-with-views-not-with-fragments以供参考。在较大的公司中,轻量级活动例如lyft是有意义的,因为他们已经构建了一个MVC模式https://github.com/lyft/scoop。对于较小的项目,我强烈建议让您的活动成为展示者/控制者,将数据绑定到视图。 –

+0

对于MVC/MVP/MVVM而言,Google工程师Dianne Hackborn表达的架构没有“正确”的答案https://plus.google.com/+DianneHackborn/posts/FXCCYxepsDU –

相关问题