【问题标题】:Update arguments for already created fragment更新已创建片段的参数
【发布时间】:2015-09-27 22:24:04
【问题描述】:

我有一个片段 A 和一个片段 B。 片段 A 从 2 个不同的屏幕(也是片段)调用。

现在,片段 A 在调用时使用 setArguments(bundle) 将参数传递给片段 B。

像这样:(这些行写在片段A中)

Bundle bundle = new Bundle();

bundle.putString("bookId", bookListItems.get(position).getBookId());
bundle.putString("bookName", bookListItems.get(position).getBookName());

Fragment b = new B();
b.setArguments(bundle);

replaceFragment(b, bundle);

而replaceFragment函数如下:

private void replaceFragment (Fragment fragment, Bundle bundle) {
  String backStateName = fragment.getClass().getName();

  FragmentManager manager = mActivity.getFragmentManager();
  boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);

  if (!fragmentPopped) { //fragment not in back stack, create it.
     FragmentTransaction ft = manager.beginTransaction();
     ft.replace(R.id.frame_container, fragment);
     ft.addToBackStack(backStateName);
     ft.commit();
   } else {
     fragment.getArguments().putString("bookId", bundle.getString("bookId"));
     fragment.getArguments().putString("bookName", bundle.getString("bookName"));
   }
}

现在,问题是,当从屏幕 1 调用片段 A 时,它工作正常并将正确的参数传递给片段 B。但是当从屏幕 2 调用它时,传递给 B 的参数永远不会更新,它总是打开向上片段 B 的最后一个状态。

请帮忙。

【问题讨论】:

    标签: android android-fragments android-studio


    【解决方案1】:

    例如,您可以在 Fragment 的子类中创建获取新数据的子类,并在您想要更新它时从托管 Activity 调用此方法

    public void updateData(String bookName, String bookId) {
       if (getView() == null) {
          return;
       }
       ((TextView)getView().findViewById(R.id.texviewid)).setText(bookName);
    
    }
    

    在您的Activity 中,您必须保留对特定子类的引用,作为类成员。

    另一种方法可以使用BroadcastReceiver。在您的片段中使用特定的IntentFilter 注册它,并从您的活动中使用LocalBroadcastManager 在本地广播更改的意图。您仍然可以使用相同的方法来更新 UI。调用onReceive时,检查分片状态,如果是正确状态,则从Intent中提取数据,并调用该方法。例如

    @Override
    public void onReceive(Context context, Intent intent) {
         if (isRemoving() || isDetached() || !isAdded()) {
              return;
          }
          // extract data from intent
          // call updateData
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      相关资源
      最近更新 更多