Как переключаться между фрагментами во время onclick?

У меня есть проект, который я пытаюсь сделать. Я столкнулся с небольшой проблемой, и я не уверен, как обойти ее. Ниже приведено изображение приложения.

Я бы хотел, чтобы пользователь сделал onclicks один из элементов списка, часть, которая говорит, что «Hello! It's Fragment2» изменяется на новый xml, который я объявил в приложении. Поэтому, если я нажму на ATO listItem, то фрагмент с правой стороны должен измениться на нечто вроде «Hello! It's ATO Fragment»

Введите описание изображения здесь

Вот мой код:

AndroidListFragmentActivity:

package com.exercise.AndroidListFragment; import android.app.Activity; import android.os.Bundle; public class AndroidListFragmentActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 

FRAGMENT2:

 package com.exercise.AndroidListFragment; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub return inflater.inflate(R.layout.fragment2, container, false); } } 

MyListFragment1:

 package com.exercise.AndroidListFragment; import android.app.ListFragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.Toast; public class MyListFragment1 extends ListFragment { String[] options ={ "ATO", "BETA", "DELT", "PHI DELT", "SAE", "SIG NU", "FIJI", "SIG CHI", "PHI PSI" }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListAdapter myListAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, options); setListAdapter(myListAdapter); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.listfragment1, container, false); } @Override public void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub Toast.makeText(getActivity(), getListView().getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show(); } } 

Fragment2.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/fragment2text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello! It's Fragment2" /> </LinearLayout> 

listfragment1.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="8dp" android:paddingRight="8dp"> <ListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:drawSelectorOnTop="false"/> <TextView android:id="@id/android:empty" android:layout_width="match_parent" android:layout_height="match_parent" android:text="No data"/> </LinearLayout> 

main.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <fragment android:name="com.exercise.AndroidListFragment.MyListFragment1" android:id="@+id/fragment1" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <fragment android:name="com.exercise.AndroidListFragment.Fragment2" android:id="@+id/fragment2" android:layout_weight="2" android:layout_width="0px" android:layout_height="match_parent" /> </LinearLayout> 

Solutions Collecting From Web of "Как переключаться между фрагментами во время onclick?"

Не знаете, каково минимальное исправление, чтобы заставить ваш код работать, но посмотрели ли вы на использование ящика навигации для переключения между фрагментами? Мне кажется, что пример в официальных документах совпадает с тем, что вы хотите достичь.

Ключ должен иметь какой-то контейнер для отображаемого в данный момент фрагмента (вместо использования <fragment> как в вашем XML). Например:

  <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> 

Затем переключение фрагментов происходит примерно так:

 Fragment fragment = new Fragment2(); // Insert the fragment by replacing any existing fragment FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment) .commit(); 

Дальнейшее чтение: добавление фрагмента в действие в Runtime в документах разработчика Android.