【问题标题】:What is the best structure for communicating between Fragments in android? [duplicate]android中片段之间通信的最佳结构是什么? [复制]
【发布时间】:2017-12-13 09:57:46
【问题描述】:

当一个Activity中存在一些不同的Fragment时,Fragment之间通信的最佳方式和更安全的方式是什么?
我使用了callback,但我通过构造函数传递了它,现在我遇到了一些崩溃。
我认为null callbacks 是崩溃的原因,当应用程序在后台然后用户返回应用程序时,回调为空。
有个大问题,当我在一个Activity中有很多Fragment时,在Activity中实现回调是一个困难和混乱的方式。
我已经测试了EventBus,但我的目的只是一个片段,它有点苛刻,也可能是片段需要从父片段获取数据。 你知道更好的方法吗?
my structure
我有很多片段 A, B, C ,....当fragment A更新时,我也想更新fragment B,其他fragment也是这样,更新fragment C时,D也要更新,以此类推。
如果我想使用接口,我应该写很多接口。还有其他建议吗?

【问题讨论】:

  • 您可以通过容器活动使用片段之间的所有通信
  • 你可以使用Interface

标签: android callback fragment communication


【解决方案1】:

您可以为此使用Bundle 类。

 Bundle args = new Bundle();
 args.putString("my_value", "hello world");
 Fragment1 fragment1 = new Fragment1();
 fragment1.setArguments(args);

在另一个片段中接收值:

String requiredValue = getArguments().getString("my_value");

【讨论】:

    【解决方案2】:
    if (getActivity() instanceof YourActivityName)
    {
           ((YourFragment2Name)getActivity()).variable);
    }
    

    //确保 YourFragment2Name 中的变量应该是公开的。

    【讨论】:

      【解决方案3】:

      一切都取决于您的预期场景。

      Using Interface 
      Using Broadcast Receivers 
      Using Container Activity 
      Using EventBus or Alternative Libs 
      Using Observers (Rx Pattern)
      

      接口通信请查看

      public class MyFragment extends Fragment {
      
          interface FragmentCallback {
             void onClickButton(MyFragment fragment);
          }    
      
          private FragmentCallback mCallback;
      
          @Override
          public void onClick(View v) {
              switch (v.getId()) {
                  mCallback.onClickButton(this);
              }
          }
      }
      

      在活动中

      public class MainActivity extends AppCompatActivity implements MyFragment.FragmentCallback {
      
          //onCreate
      
      
      
          @Override
          public void onClickButton(MyFragment fragment) {
             // Do your Task
          }
      }
      

      【讨论】:

      • 我正在寻找一种常规模式,用于在我的代码保持干净的活动中实现接口。
      • 我已经解释得更多了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多