将值从一个片段传递到另一个片段将返回null

时间:2016-06-21 10:41:22

标签: android android-fragments xamarin

在我的Xamarin android应用程序中,我有两个片段A& B,A将字符串名称的值发送到片段B,如下所示,

mFragmentA = new FragmentA();

string name = "john";

 var fragmenttransaction = FragmentManager.BeginTransaction();
            fragmenttransaction.Replace(Resource.Id.FragmentContainer, mFragmentA, "mFragmentA");
            fragmenttransaction.AddToBackStack(null);
            fragmenttransaction.Commit();

  Bundle bundle = new Bundle();
            bundle.PutString("namekey", name);
            mFragmentA.Arguments = bundle;
 return mFragmentA;

在oncreateView的片段B中,我尝试按下面的方式检索它,

Bundle bundle = this.Arguments;
var name= bundle.GetString("namekey", "Default Value"); //NULL REFERENCE EXCEPTION

我在name变量上得到一个空引用异常。为什么?如何在片段A中获取字符串名称并将其分配给片段B中的名称变量?

4 个答案:

答案 0 :(得分:0)

因为您首先替换片段,然后将bundle放入已经在屏幕上的片段中,这里是@jobbert xD

答案 1 :(得分:0)

更改您的代码如下

    mFragmentA = new FragmentA();

    string name = "john";

     var fragmenttransaction = FragmentManager.BeginTransaction();

          Bundle bundle = new Bundle();
          bundle.PutString("namekey", name);
          mFragmentA.setArguments(bundle);


        fragmenttransaction.Replace(Resource.Id.FragmentContainer, mFragmentA, "mFragmentA");
        fragmenttransaction.AddToBackStack(null);
        fragmenttransaction.Commit();


        return mFragmentA;

答案 2 :(得分:0)

试试这个例子。在提交片段事务之前。将所有数据放入fragmentB对象后,应将其替换为fragmentA。

Bundle bundle = new Bundle();
bundle.PutString("namekey", name);
fragmentB.setArguments(bundle);

答案 3 :(得分:0)

为什么不使用构造函数或属性?

string name = "john";
mFragmentA = new FragmentA(name);

var fragmenttransaction = FragmentManager.BeginTransaction();
        fragmenttransaction.Replace(Resource.Id.FragmentContainer, mFragmentA, "mFragmentA");
        fragmenttransaction.AddToBackStack(null);
        fragmenttransaction.Commit();

 return mFragmentA;

构造函数将在OnCreateView和OnCreate方法执行之前执行。

注意:在您的代码中,没有FragmentB。所以这只是将数据从当前的活动/片段传递到FragmentA(因为那是“实例化的”)。