FragmentTransaction остается старым фрагментом

#java #android #listview #android-fragments

#java #Android #просмотр списка #android-фрагменты

Вопрос:

Я новичок в программировании на Android. Я хочу сделать слайдер левым или правым фрагментом. например, при нажатии кнопки отображается фрагмент списка, а фрагмент карты скрывается, и наоборот.Сначала я добавил 2 фрагмента в свой framelayout и использую hide / show вместо replace.

Однако моя fragmenttransaction иногда работает, а иногда и не работает. Например, при нажатии кнопки фрагмент карты вводится (показать), выдвигаясь влево, а список скрывается, выдвигаясь вправо. Но иногда список остается моим макетом фрейма. В этой ситуации, когда я нажимаю кнопку, обычно возникает обратный эффект, но фрагмент списка входит (показывает) в мой макет фрейма, и он дублируется.

Как я могу решить проблему с остатками listview.

Мои коды здесь

Фрагмент Listview

 <ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"/>
  

MainActivity.java

 public void onClick(View view) {
            if (mapshere) {


                android.support.v4.app.FragmentTransaction ft2 = getSupportFragmentManager().beginTransaction();

                ft2.setCustomAnimations(R.anim.map_slide_in_right, R.anim.map_left_evade);

                    ft2.show(list);
                    ft2.hide(map);
                ft2.commit();

                btnList.setImageResource(R.drawable.icon_pin_menu1);

            } else {

                android.support.v4.app.FragmentTransaction ft2 = getSupportFragmentManager().beginTransaction();

                ft2.setCustomAnimations(R.anim.map_slide_in_left, R.anim.map_right_evade);

                ft2.show(map);
                ft2.hide(list);

                ft2.commit();


                btnList.setImageResource(R.drawable.icon1);

            }
  

Мой список на Creatview

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.map_fragment_item_list, container, false);

    // Set the adapter
    mListView = (AbsListView) view.findViewById(android.R.id.list);

    ((AdapterView<ListAdapter>) mListView).setAdapter(getmAdapter());
    mListView.setOnItemClickListener(this);
    return view;


}
  

Как я уже говорил ранее, я уже добавил эти фрагменты в функцию onCreate. Но я скрываю фрагмент списка.

Ответ №1:

Попробуйте использовать

 getSupportFragmentManager()
.beginTransaction()
// set your custom in/out animations 
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left,R.anim.slide_out_right)
// replace the content of the layout defined with R.id.content_frame by your fragment.
.replace(R.id.content_frame, fragment)
.commit();
  

Это должно решить ваши проблемы с несколькими экземплярами фрагментов.