web-dev-qa-db-ja.com

あるフラグメントから別のフラグメントにデータを送信する方法は?

こんにちは、この質問には答えがあります。私はそれらすべてを試しましたが、私のアプリでは機能していません。 3つのFragmentアクティビティを持つアプリを開発しています。最初のフラグメントはWebサイトを示し、2番目のフラグメントにはリストビューがあり、3番目のフラグメントには別のリストビューがあります。ここで、ユーザーがlistitemをクリックしたときに、3番目のフラグメントから最初のフラグメントに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);}
});

これは、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);

リストアイテムをクリックしても何も表示されません。最初のフラグメントにリダイレクトされません。手伝ってください。

21
Muhidul Hassan

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");
73
João Marcos

1.フラグメントが同じアクティビティでホストされている場合-フラグメントにインテントをキャストできません。フラグメントはアクティビティの一部として機能し、それ自体はアクティビティではありません。そのため、フラグメント間で文字列を共有するには、アクティビティで静的な文字列を宣言できます。フラグメントAからその文字列にアクセスして値を設定し、フラグメントBの文字列値を取得します。

2.両方のフラグメントは異なるアクティビティによってホストされます。次に、putExtraを使用して、アクティビティAのフラグメントAからアクティビティBに文字列を渡すことができます。その文字列をアクティビティBに保存し、フラグメントBで使用します。

3
ViJay

バンドルをフラグメントに添付する必要があります。

fragment.setArguments(bundle);

その後、新しいフラグメントを変更または交換します。

文字列が新しいフラグメントにあることを確認する必要があります。デバッグ中!!

2
Alfaplus

2つの方法でデータを送信できます。まず、データの送信中にそのフラグメントを開始する場合

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));
0
Narender Gusain