【问题标题】:How to pass variables with Android fragmentmanager [duplicate]如何使用Android片段管理器传递变量[重复]
【发布时间】:2016-06-14 17:03:47
【问题描述】:

我有以下简单的代码可以在内容框架中从一个片段切换到另一个片段。有没有简单的方法可以在下面的代码中传递变量?

FragmentManager fm = getActivity().getFragmentManager();

fm.beginTransaction().replace(R.id.content_frame, new TransactionDetailsFragment()).commit();

【问题讨论】:

  • 不知道为什么这被标记为欺骗,这个问题清楚地说明了fragmentmanager,引用的答案仅指一个新的片段类。对于java newb来说,这是一个差异。然而,接受的答案似乎已经正确地承认了这一点。
  • 好问题,这正是我想要的,与标记的“重复”大不相同

标签: android android-fragments fragmentmanager


【解决方案1】:

您可以使用捆绑包:

FragmentManager fm = getActivity().getFragmentManager();
Bundle arguments = new Bundle();
arguments.putInt("VALUE1", 0);
arguments.putInt("VALUE2", 100);

MyFragment myFragment = new Fragment();
fragment.setArguments(arguments);

fm.beginTransaction().replace(R.id.content_frame, myFragment).commit();

然后,您检索如下:

public class MyFragment extends Fragment {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle bundle = this.getArguments();
        if (bundle != null) {
            int value1 = bundle.getInt("VALUE1", -1);
            int value2 = bundle.getInt("VALUE2", -1);
        }
    }
}

【讨论】:

    【解决方案2】:

    TransactionDetailsFragment 创建一个参数化构造函数怎么样?

    fm.beginTransaction().replace(R.id.content_frame, new TransactionDetailsFragment(YOUR_PARAMS)).commit();
    

    当您创建new TransactionDetailsFragment(YOUR_PARAMS) 作为FragmentTransaction 的参数时,我认为使用构造函数是一个不错的选择。

    【讨论】:

    • 使用这个,但是有一个问题——没有noarg构造函数,这个片段不能在xml布局中使用。
    【解决方案3】:

    或者您可以使用 newInstance 方法 - 在 Fragment 类中创建一个方法,例如:

     public static TransactionDetailsFragment newInstance(String param) {
        TransactionDetailsFragment frag = new TransactionDetailsFragment();
        Bundle bund = new Bundle();
        bund.putString("paramkey", param); // you use key to later grab the value
        frag.setArguments(bund);
        return frag;
    }
    

    所以要创建你的片段:

    TransactionDetailsFragment.newInstance("PASSING VALUE");
    

    (这是用来代替你的new TransactionDetailsFragment()

    然后例如在同一片段的 onCreate/onCreateView 中,您会得到如下值:

    String value = getArguments().getString("paramkey");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      相关资源
      最近更新 更多