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

Привет, я знаю, что есть ответы на этот вопрос. Я пробовал все, но он не работает в моем приложении. Я разрабатываю приложение, которое имеет 3 функции Фрагмента. Первый фрагмент показывает веб-сайт, второй фрагмент имеет 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");

Ответ 2

Вы должны прикрепить свой комплект к вашему фрагменту.

fragment.setArguments(bundle);

и после этого измените или замените новый фрагмент.

Вы должны быть уверены, что String находится в новом фрагменте. Отладка !!

Ответ 3

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

Фрагменты 2.Both размещаются разными Activities-. Затем вы можете использовать putExtra для передачи строки из фрагмента A операции A в действие B. Храните эту строку в Activity B и используйте ее во фрагменте B.

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

Ответ 5

      private fun One() {
            val args = Bundle()
            args.putString("Floor", "1")
            args.putString("Floor_1","1A")
            args.putString("Floor_2","1B")
            args.putString("Floor_3","1C")
            val newFragment = FloorRoom()
            newFragment.arguments = args
            fragmentManager!!.beginTransaction().addToBackStack(null).replace(R.id.mFrameContainer, newFragment).commit()

        }


//get bundle data into another fragment

  val floor = this.arguments!!.getString("Floor")
        val floor1 = this.arguments!!.getString("Floor_1")
        val floor2 = this.arguments!!.getString("Floor_2")
        val floor3 = this.arguments!!.getString("Floor_3")

        mFloor.text = floor
        mFloor1.text = floor1
        mFloor2.text = floor2
        mFloor3.text = floor3