Android Studio: невозможно удалить фрагмент

Я пытаюсь удалить фрагмент, но он не работает.

Я проверял с помощью logcat, и он заметил, что была нажата кнопка, и это сообщение передается в основное действие. Я предполагаю, что с моим кодом что-то не так, но я не могу понять, что это такое. Был бы признателен за помощь.

MainMenu.java

package com.example.android.learninstrumentation;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainMenu extends AppCompatActivity implements MainMenuStFrag.MainMenuStFragListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_menu);

        //Create a new Fragment to be placed in the Activity layout
        Fragment menuSiFragment = new MainMenuSiFrag();
        Fragment menuStFragment = new MainMenuStFrag();
        //Add the fragment to the 'fragment_container' layout
        getSupportFragmentManager().beginTransaction().add(R.id.fragment_type_si_container, menuSiFragment).commit();
        getSupportFragmentManager().beginTransaction().add(R.id.fragment_type_st_container, menuStFragment).commit();
    }

    //The user clicked 'expand' from MainMenuStFrag. Remove MainMenuSiFrag.
    public void onExpandClick () {
        Log.i("MainMenu", "Click message received");
        Fragment oldFragment = new MainMenuSiFrag();
        getSupportFragmentManager().beginTransaction().remove(oldFragment).addToBackStack(null).commit();
    }

    public void onCheckboxClick() {

    }

}

MainMenuStFrag.java

package com.example.android.learninstrumentation;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.ImageView;

public class MainMenuStFrag extends Fragment implements View.OnClickListener{

    MainMenuStFragListener mCallback;

    //Inflate the layout and set buttons for this fragment
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        //Store the Fragment in the mainMenu variable
        View mainMenu = inflater.inflate(R.layout.main_menu_st_fragment, container, false);

        //Define the buttons and set onClickListeners
        ImageView expand = mainMenu.findViewById(R.id.mainMenu_imageView_SelectTopics);
        expand.setOnClickListener(this);
        CheckBox checkBox = mainMenu.findViewById(R.id.mainMenu_CheckBox_SelectAllTopics);
        checkBox.setOnClickListener(this);

        return mainMenu;
        }

    //Interface for communication with container Activity
    public interface MainMenuStFragListener {
        void onExpandClick();
        void onCheckboxClick();
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        //This makes sure the container Activity has implemented the callback interface.
        // If not, it throws an exception.
        try {
            mCallback = (MainMenuStFragListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement OnHeadlineSelectedListener");
        }

    }

        //onClick actions
        @Override public void onClick(View v) {
            switch (v.getId()) {
                //Remove the other 'type' item
                case R.id.mainMenu_imageView_SelectTopics:
                    Log.i("MainMenuStFrag", "Topics>Expand=Clicked");
                    mCallback.onExpandClick();
                    break;
                case R.id.mainMenu_CheckBox_SelectAllTopics:
                    mCallback.onCheckboxClick();
                    break;
            }
        }
}

MainMenuSiFrag.java

package com.example.android.learninstrumentation;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class MainMenuSiFrag extends Fragment {

    //Inflate the layout for this fragment
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View mainMenu = inflater.inflate(R.layout.main_menu_si_fragment, container, false);
        return mainMenu;
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
240
1

Ответы 1

Вы создали новый экземпляр фрагмента для удаления фрагмента

 public void onExpandClick () {
        Log.i("MainMenu", "Click message received");
        Fragment oldFragment = new MainMenuSiFrag();
        getSupportFragmentManager().beginTransaction().remove(oldFragment).addToBackStack(null).commit();
    }

вместо этого найдите фрагмент и удалите его из контейнера

Fragment oldFragment=getSupportFragmentManager().findFragmentById(R.id.fragment_type_si_container);
             if (oldFragment!=null && oldFragment instanceof MainMenuSiFrag)
             {
              getSupportFragmentManager()
                .beginTransaction().
                remove(oldFragment).commit();

             }

Пожалуйста, примите ответ, если он вам действительно поможет.

Md Sufi Khan 05.05.2018 09:55

Другие вопросы по теме