Java 具有不同演示者的相同片段

Java 具有不同演示者的相同片段,java,android,android-fragments,Java,Android,Android Fragments,我有一个包含3个选项卡的活动:A、B和C。对于每个选项卡,我都创建了一个片段(-f)和演示者(-p)。问题是所有三个片段(A-f、B-f、C-f)都是相同的,但演示者不是。所以问题是如何避免代码重复?我试图创建一个BaseFragment,并将其从a-f、B-f、C-f扩展,但如果我在a-f中,并且在C-f中发生了一些事情(比如UI更新),那么我会收到 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v7.w

我有一个包含3个选项卡的活动:A、B和C。对于每个选项卡,我都创建了一个片段(-f)和演示者(-p)。问题是所有三个片段(A-f、B-f、C-f)都是相同的,但演示者不是。所以问题是如何避免代码重复?我试图创建一个BaseFragment,并将其从a-f、B-f、C-f扩展,但如果我在a-f中,并且在C-f中发生了一些事情(比如UI更新),那么我会收到
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v7.widget.RecyclerView.setVisibility(int)”
,因为此时的C-f已被破坏(我说得对吗?)我不想用相同的布局创建3个相同的片段。

我做了类似的事情,我发现使用视图更简单,问题更少。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的presenter/controller,因此我将继续使用这里的逻辑,而不是现在定义presenter类。在每个选项卡上,您可以控制要显示的视图。我没有看到您正在执行片段转换的代码,因此我无法确定您的片段是否已销毁。

感谢您的选择。对于片段事务,我使用ViewPager。我不确定使用activity作为演示者是否是一个好主意,我会用谷歌搜索itFragments,但你会遇到这样的情况:你会偶尔崩溃一次,不幸的是,因为你无法编辑android源代码,所以不会有修复方案。请参阅以供参考。在大公司中,像lyft这样的轻量级活动是有意义的,因为他们已经构建了MVC模式。对于较小的项目,我强烈建议让您的活动成为演示者/控制器,将数据绑定到视图。就MVC/MVP/MVVM而言,尽管谷歌工程师Dianne Hackborn表示,在架构方面没有“正确”的答案