C# 如何在Xamarin Android上的选项卡之间传递数据?

C# 如何在Xamarin Android上的选项卡之间传递数据?,c#,android,xamarin,xamarin.android,C#,Android,Xamarin,Xamarin.android,我在viewpager中有两个选项卡。因此,在fragment1中,我输入一个文本,当在tab2中被选中时,fragment2将从fragment1中的文本中获取数据 例如:当我打开tab1->我输入一个文本是“abcd”->我打开tab2->我想从tab1(片段1)中得到一个文本是“abcd” 公共类片段1:Android.Support.V4.App.Fragment { Fragment2 Fragment2=新的Fragment2(); 创建时公共覆盖无效(Bundle savedIns

我在viewpager中有两个选项卡。因此,在fragment1中,我输入一个文本,当在tab2中被选中时,fragment2将从fragment1中的文本中获取数据

例如:当我打开tab1->我输入一个文本是“abcd”->我打开tab2->我想从tab1(片段1)中得到一个文本是“abcd”

公共类片段1:Android.Support.V4.App.Fragment
{
Fragment2 Fragment2=新的Fragment2();
创建时公共覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
//在这里创建你的片段
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
//使用此选项可返回此片段的自定义视图
//返回充气器。充气(Resource.Layout.YourFragment,container,false);
Singleton Singleton=Singleton.GetInstance();;
singleton.SetSource(“abcd”);
}
}公营单身人士
{
私有静态单例单例;
字符串a=null;
私人单身人士()
{
}
公共静态单例GetInstance()
{
if(singleton==null)
singleton=新singleton();
返回单身;
}
公共void集合源(字符串文本)
{
这个.a=文本;
}
公共字符串showMessage()
{
返回a;
}
}
公共类碎片2:Android.Support.V4.App.Fragment
{
公共列表数据=新列表();
公共无效添加(字符串t)
{
数据。添加(t);
}
文本视图;
创建时公共覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
//在这里创建你的片段
}
创建视图上的公共覆盖视图(布局、充气机、视图组容器、捆绑包保存状态)
{
//使用此选项可返回此片段的自定义视图
//返回充气器。充气(Resource.Layout.YourFragment,container,false);
//返回base.OnCreateView(充气机、容器、savedInstanceState);
返回充气机。充气(Resource.Layout.view2,容器,false);
txt=View.findviewbyd(Resource.Id.txtgetdata);
如果(数据!=null)
{
txt.Text=数据[0];
}
其他的
Toast.MakeText(Application.Context,“no”,ToastLength.Long).Show();
}
}
我试过了,但没有结果

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.SetArguments(bundle);
在创建另一个片段时

Bundle bundle = this.GetArguments();
int myInt = bundle.GetInt(key, defaultValue);
另外,两个片段不应直接通信,而应通过活动进行通信

从开发商网站:

通常,您希望一个片段与另一个片段通信,例如 基于用户事件更改内容的示例。全部的 片段到片段的通信是通过相关的 活动。两个片段不应该直接通信


请参阅和

在经过几个小时的研究/测试和调试并解决问题后,请尝试此操作

  • 在你的活动中

    • 添加公共字符串tabFragment{get;set;}
  • 在源代码片段中

    • ie单击或导航到其他片段
  • 在目标片段中(即将修改哪些元素)
    • 添加这样一个方法
  • public void setValText(string str){txtUsrFirstName.Text=str;}


    ================================================================

    没有结果不明白您可以详细说明吗?
    Bundle=this.Arguments;Text=bundle.GetString(“键”)。此.Arguments为null您必须在导航时传递这些参数,否则它将为null引用链接没有导航时我们无法传递数据
    public override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);Fragment2 fragment=new Fragment2();Bundle Bundle=new Bundle();Bundle.PutString(“key”,“abcd”);frag.Arguments=bundle;//在此处创建片段}
    Bundle bundle = this.GetArguments();
    int myInt = bundle.GetInt(key, defaultValue);
    
    string tab = ((ActivityUser)Activity).tabFragmentAddUser;
    FragmentAddUser fragment = (FragmentAddUser); 
    Activity.SupportFragmentManager.FindFragmentByTag(tab);
    fragment.setValText("Hello");
    viewPager.SetCurrentItem(1, true);