如何使用Android片段管理器传递变量[重复]

Posted

技术标签:

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

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

FragmentManager fm = getActivity().getFragmentManager();

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

【问题讨论】:

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

【讨论】:

以上是关于如何使用Android片段管理器传递变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从顶点着色器传递到片段着色器,中间有着色器[重复]

如何使用警报管理器将数据从片段传递到广播接收器

访问片段的上下文 [重复]

如何将选定的微调器 id 传递给片段

android片段-数据传递-最佳实践[重复]

OpenGL着色器没有将变量从顶点传递到片段着色器