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