Как отправить данные из одного фрагмента в другой фрагмент?

#android #android-fragments #android-listview #android-webview

#Android #android-фрагменты #android-listview #android-webview

Вопрос:

Привет, я знаю, что есть ответы на этот вопрос. Я перепробовал их все, но это не работает в моем приложении. Я разрабатываю приложение, которое имеет активность 3 фрагмента. Первый фрагмент показывает веб-сайт, второй фрагмент имеет listview, а третий фрагмент имеет другой listview. Теперь я хочу отправить URL из третьего фрагмента в первый фрагмент, когда пользователь нажимает на listitem..Это то, что я сделал.

Я отправляю строковый 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");
  

Комментарии:

1. что вы подразумеваете под вашим новым фрагментом?

2. Это ваш «Другой фрагмент». Является ли фрагмент, который вы хотите получить, строковым значением.

3. к чему относится контейнер?

4. Объявлен ли идентификатор в вашем XML-файле activity. android: id=»@ id/container»

5. ok..It работает.. Он перенаправляет на первый фрагмент. Но отображается диалоговое окно для выбора браузера для просмотра веб-сайта, а не для отображения веб-сайта в моем webview .. Можете ли вы помочь мне в этом. Я приму ответ.:)

Ответ №2:

1. Если фрагменты размещены в одном и том же activity — Вы не можете передать намерение фрагменту. Фрагмент действует как часть действия, он не является действием сам по себе. Итак, чтобы разделить строку между фрагментами, вы можете объявить статическую строку в Activity. Обратитесь к этой строке из фрагмента A, чтобы задать значение и получить строковое значение во фрагменте B.

2. Оба фрагмента размещены в разных действиях — Тогда вы можете использовать putExtra для передачи строки из фрагмента A действия A в действие B. Сохраните эту строку в действии B и используйте ее во фрагменте B.

Комментарии:

1. У меня другой фрагмент, и я хочу отправить строку из фрагмента в другой фрагмент.

2. да, понял, но что оба фрагмента размещены в одном и том же Activity??

Ответ №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));
  

Комментарии:

1. Как мне получить данные во втором фрагменте?