如何从一个片段发送数据到另一个片段?
嗨,我知道有这个问题的答案。 我已经尝试了所有这些,但它不适用于我的应用程序。 我正在开发一个有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));