#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. Как мне получить данные во втором фрагменте?