如何从一个片段发送数据到另一个片段?

嗨,我知道有这个问题的答案。 我已经尝试了所有这些,但它不适用于我的应用程序。 我正在开发一个有3个片段活动的应用程序。 第一个片段显示一个网站,第二个片段有listview,第三个片段有另一个listview。 现在我想从第三个片段发送URL到用户点击listitem时的第一个片段。这就是我所做的。

我从这个片段发送stringURL到第一个片段。

list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { FragmentC fragment = new FragmentC(); final Bundle bundle = new Bundle(); bundle.putString("position", "http://www.facebook.com"); fragment.setArguments(bundle);} }); 

这是第一个片段,我需要的url,并希望在web视图中显示。

 String url="http://www.hotelsearcher.net/"; Bundle args = getArguments(); if (args != null){ url = args.getString("position"); } WebView webView= (WebView) V.findViewById(R.id.webView1); WebSettings webViewSettings = webView.getSettings(); webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true); webViewSettings.setJavaScriptEnabled(true); webViewSettings.setPluginState(PluginState.ON); webView.loadUrl(url); 

当我点击列表项时,我什么都看不到。 它不会将我redirect到第一个片段。请帮助我..

使用Bundle发送string:

 //Put the value YourNewFragment ldf = new YourNewFragment (); Bundle args = new Bundle(); args.putString("YourKey", "YourValue"); ldf.setArguments(args); //Inflate the fragment getFragmentManager().beginTransaction().add(R.id.container, ldf).commit(); 

在新碎片的onCreateView中:

 //Retrieve the value String value = getArguments().getString("YourKey"); 

1.如果片段由相同的活动托pipe,则不能将片段投射到片段。 片段作为活动的一部分,它本身不是一个活动。 所以要在片段之间共享一个string,你可以在Activity中声明一个静态string。 从片段A访问该string以设置值并获取片段B中的string值

2.两个片段由不同的活动托pipe – 然后您可以使用putExtra将活动A的片段A中的string传递给活动B.将该string存储在活动B中并在片段B中使用它。

你必须把你的包附加到你的片段。

 fragment.setArguments(bundle); 

并在此之后更换或更换新的片段。

你必须确定该string是在新的片段。 debugging!!

您可以通过两种方式发送数据首先,当您要发送数据时启动该片段

 SecondFragment ldf = new SecondFragment (); Bundle args = new Bundle(); args.putString("YourKey", "YourValue"); ldf.setArguments(args); //Inflate the fragment getFragmentManager().beginTransaction().add(R.id.container, ldf).commit(); 

其次,当你想发送数据而不打开你的片段

 FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.add(R.id.fragContainer1, new ModelListFragment(), FRAG_MODEL_LIST); ft.add(R.id.fragContainer2, new TrimListFragment(), FRAG_TRIM_LIST); ft.commit(); Fragment fragment = mFragmentManager.findFragmentByTag(MainActivity.FRAG_MODEL_LIST); Log.d("MY", "found fragment: " + (fragment != null));