如何将数据从一个 Fragment 发送到另一个 Fragment?
Posted
技术标签:
【中文标题】如何将数据从一个 Fragment 发送到另一个 Fragment?【英文标题】:How to send data from one Fragment to another Fragment? 【发布时间】:2014-08-24 16:17:15 【问题描述】:您好,我知道这个问题有答案。我已经尝试了所有这些,但它在我的应用程序中不起作用。 我正在开发一个具有 3 个片段活动的应用程序。第一个片段显示一个网站,第二个片段有列表视图,第三个片段有另一个列表视图。现在我想在用户点击列表项时将 URL 从第三个片段发送到第一个片段。这就是我所做的。
我正在从这个 Fragment 向第一个 Fragment 发送字符串 url。
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 并希望在 webview 中显示的第一个片段。
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);
当我单击列表项时,我什么也看不到。它不会将我重定向到第一个片段。请帮助我..
【问题讨论】:
【参考方案1】:使用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");
【讨论】:
YourNewFragment 是什么意思? 是你的“另一个片段”。是你想要接收String值的fragment。 容器指的是什么? 是你的活动xml文件中声明的id。 android:id="@+id/container" 好的..它有效..它重定向到第一个片段。但它显示对话框选择浏览器来查看网站,而不是在我的 webview 上显示网站..你能帮我吗这个。我会接受答案。:)【参考方案2】:1.如果片段由相同的活动托管 - 您不能将意图投射到片段。 Fragment 是 Activity 的一部分,它本身并不是一个 Activity。因此,要在片段之间共享字符串,您可以在 Activity 中声明一个静态字符串。从片段 A 访问该字符串以设置值并获取片段 B 中的字符串值。
2.两个片段都由不同的活动托管-然后您可以使用 putExtra 将字符串从 Activity A 的片段 A 传递给 Activity B。将该字符串存储在 Activity B 中并在片段 B 中使用。
【讨论】:
我有不同的片段,我想将字符串从片段发送到另一个片段。 是的,理解,但是这两个片段都由同一活动托管??【参考方案3】:您必须将您的捆绑包附加到您的片段。
fragment.setArguments(bundle);
然后更改或替换新片段。
您必须确保字符串在新片段中。调试中!!
【讨论】:
【参考方案4】:您可以通过两种方式发送数据 首先,当您想在发送数据时启动该片段时
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));
【讨论】:
如何接收第二个片段中的数据?以上是关于如何将数据从一个 Fragment 发送到另一个 Fragment?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Fragment 中使用 SharedPreferences 保存数据