在我的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中的名称变量?
答案 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
(因为那是“实例化的”)。