こんにちは、この質問には答えがあります。私はそれらすべてを試しましたが、私のアプリでは機能していません。 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);
リストアイテムをクリックしても何も表示されません。最初のフラグメントにリダイレクトされません。手伝ってください。
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.フラグメントが同じアクティビティでホストされている場合-フラグメントにインテントをキャストできません。フラグメントはアクティビティの一部として機能し、それ自体はアクティビティではありません。そのため、フラグメント間で文字列を共有するには、アクティビティで静的な文字列を宣言できます。フラグメントAからその文字列にアクセスして値を設定し、フラグメントBの文字列値を取得します。
2.両方のフラグメントは異なるアクティビティによってホストされます。次に、putExtraを使用して、アクティビティAのフラグメントAからアクティビティBに文字列を渡すことができます。その文字列をアクティビティBに保存し、フラグメントBで使用します。
バンドルをフラグメントに添付する必要があります。
fragment.setArguments(bundle);
その後、新しいフラグメントを変更または交換します。
文字列が新しいフラグメントにあることを確認する必要があります。デバッグ中!!
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));