【问题标题】:Identical fragments with different presenters具有不同演示者的相同片段
【发布时间】:2017-07-28 00:27:49
【问题描述】:

我有一个包含 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: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setVisibility(int)' on a null object reference,因为此时的 C-f 已被破坏(对吗?)我不想创建 3 个具有相同布局的相同片段。

【问题讨论】:

    标签: java android android-fragments


    【解决方案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);
          }
    }
    

    Activity 是 android 的演示者/控制器,所以我会继续在这里设置逻辑,而不是现在定义演示者类。在每个选项卡上,您可以控制要显示的视图。我没有看到您执行片段转换的代码,因此我无法确定您的片段是否被破坏。

    【讨论】:

    • 感谢您的选择。对于片段事务,我使用 ViewPager。我不确定使用活动作为演示者是否是一个好主意,我会谷歌它
    • Fragments 可以工作,但是你会遇到这样的情况,你会在蓝月亮中遇到一次崩溃,不幸的是,由于你无法编辑 android 源代码,因此无法修复。请参阅stackoverflow.com/questions/18710561/… 以供参考。在较大的公司中,使用 lyft 等较轻的活动是有意义的,因为它们已经构建了 MVC 模式github.com/lyft/scoop。对于较小的项目,我强烈建议让您的活动成为演示者/控制器,以将数据绑定到视图。
    • 在 MVC / MVP / MVVM 方面,虽然 Google 工程师 Dianne Hackborn plus.google.com/+DianneHackborn/posts/FXCCYxepsDU987654323@ 表示在架构方面没有“正确”答案。
    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多