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

时间:2014-07-03 13:45:26

标签: android android-fragments android-listview android-webview

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

我将这个片段中的字符串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);}
});

这是我需要网址并希望在网页视图中显示的第一个片段。

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);

当我点击列表项时,我什么也看不见。它没有将我重定向到第一个片段。请帮助我..

4 个答案:

答案 0 :(得分:71)

使用捆绑发送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 :(得分:2)

您必须将捆绑包附加到您的片段。

fragment.setArguments(bundle);

之后更改或替换新片段。

您必须确保String位于新片段中。调试!!

答案 2 :(得分:2)

1.如果片段由同一活动托管 - 您无法将意图转移到Fragment。片段作为Activity的一部分,它本身不是一个活动。因此,要在片段之间共享字符串,可以在Activity中声明一个静态字符串。从片段A访问该字符串以设置值并获取片段B中的字符串值。

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

答案 3 :(得分:0)

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

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));