Как заменить один фрагмент на другой фрагмент с помощью прослушивателя в первом фрагменте

Я использую два фрагмента в своей деятельности. Вначале я добавлю один фрагмент в действие. Затем, используя прослушиватель в первом фрагменте, я хочу заменить его вторым фрагментом. Я старался в соответствии с моим пониманием, но он не заменяет. Он показывает, что оба фрагмента перекрываются.

Here is my code: // MainActivity public class MainActivity extends Activity { Fragment Fragment_one; Button one; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //one=(Button) findViewById(R.id.button1); //one.setOnClickListener(new View.OnClickListener() { //@Override //public void onClick(View arg0) { // TODO Auto-generated method stub FragmentManager man=getFragmentManager(); FragmentTransaction tran=man.beginTransaction(); Fragment_one=new Fragment1(); tran.add(R.id.fragment_container, Fragment_one);//tran. tran.addToBackStack(null); tran.commit(); //} //}); } } //fragment code public class Fragment1 extends Fragment{ Button add; Fragment2 fragment_two; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub //return super.onCreateView(inflater, container, savedInstanceState); View view=inflater.inflate(R.layout.fragment_1, container,false); add=(Button) view.findViewById(R.id.button1); fragment_two =new Fragment2(); add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub FragmentTransaction t=getActivity().getFragmentManager().beginTransaction(); t.remove( new Fragment1()); t.replace(R.id.fragment1, fragment_two);t.addToBackStack(null); t.commit(); //t.addToBackStack(null); } }); return view; } } 

Экран вывода

Solutions Collecting From Web of "Как заменить один фрагмент на другой фрагмент с помощью прослушивателя в первом фрагменте"

Пара вещей, которые я вижу в вашем коде.

 t.remove(new Fragment1()); 

Эта строка кода ничего не сделает, потому что вы пытаетесь удалить новый экземпляр Fragment1, а не тот экземпляр, который вы изначально добавили.

 t.replace(R.id.fragment1, fragment_two) 

Это первый параметр должен быть идентификатором контейнера «R.id.fragment_container», а не R.id.fragment1.

 t.addToBackStack(null); 

Этот код может потребоваться или не понадобиться на основе того, хотите ли вы разрешить пользователю нажимать кнопку «назад», чтобы вернуться к фрагментации после того, как они достигли фрагмента2.

-Почему не раздувать оба фрагмента и использовать ваш слушатель для переключения их видимости? – brbaker

  • Можете ли вы помочь мне, как переключаться? @brbaker – Riding Cave

Добавить интерфейс и реализовать его в режиме активности и переопределения. Затем добавьте onClickListener и установите для запуска метод в интерфейсе. Затем используйте диспетчер фрагментов для выполнения show () и hide () транзакций по фрагментам по мере необходимости. ,

,

http://developer.android.com/reference/android/app/FragmentTransaction.html

Show (фрагмент фрагмента) – показывает ранее скрытый фрагмент.

Hide (фрагмент фрагмента) – скрывает существующий фрагмент.

Используйте эту строку кода в ваших фрагментированных файлах xml и сохраните свой день. Помните, пожалуйста, чтобы добавить эту строку в роли родителей и все файлы xml-фрагментов макета.

  android:background="?android:windowBackground"