Получение предыдущего состояния фрагмента Android на кнопке "Назад"

В приложении для Android у меня есть несколько фрагментов. В одном из фрагментов (фрагмент A) я переключаюсь между двумя наборами изображений в GridView по нажатию кнопки с помощью логической переменной. Щелчок элемента GridView приводит ко второму фрагменту (фрагмент B). При нажатии кнопки "Назад" на фрагменте B в сетке просмотра внутри фрагмента A загружается набор изображений по умолчанию, а не набор изображений перед переходом к следующему фрагменту фрагмента B.

Пожалуйста, руководство, как я могу восстановить предыдущий набор изображений, а не набор изображений по умолчанию?

В MainActivity я реализовал BackPressed следующим образом:

@Override
    public void onBackPressed() {
        if (frag instanceof SettingsFragment)
            loadGridViewFragment();
        else if (frag instanceof SingleDuaViewPagerFragment) {
            boolean keyIsFavSel = new SharedPreferencesSupplication().read(SingletonClass.keyIsFavSelected, false);
            if (keyIsFavSel)
                loadDuasListFragment();
            else
                loadGridViewFragment();
        }
        else if (frag instanceof DuasListFragment) {
            boolean keyIsFavSel = new SharedPreferencesSupplication().read(SingletonClass.keyIsFavSelected, false);
            if (keyIsFavSel)
                loadGridViewFragment();
            else
                loadSingleDuaFragment();
        }
        else
            super.onBackPressed();
    }

OnCreate метод GridViewFragment.java

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    //  fragment = new GridViewFragment();
        context = inflater.getContext();
        View view = inflater.inflate(R.layout.fragment_gridview, container, false); 
        ga = new GridViewAdapter(context);
        Btn_lang_Ch = (Button) view.findViewById(R.id.lng_ch);
        Btn_Settings = (Button) view.findViewById(R.id.button_settings);
        favoriteDuas = (Button) view.findViewById(R.id.btn_favorite_duas);
        GridMenu =(GridView) view.findViewById(R.id.gridView1);
    float scalefactor = getResources().getDisplayMetrics().density * 150;
        @SuppressWarnings("deprecation")
        int number = getActivity().getWindowManager().getDefaultDisplay().getWidth();
        int columns = (int) ((float) number / (float) scalefactor);
        GridMenu.setAdapter(ga);
        GridMenu.setNumColumns(columns);    
        setRetainInstance(true);
        return view;

    }

1 ответ

Ты должен позвонить setRetainInstance(true) в onCreate метод фрагмента или сохранить и загрузить правильные значения в onSaveInstanceState а также onRetainInstanceState

РЕДАКТИРОВАТЬ: Я обычно делаю что-то вроде этого:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
}

private View view;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (view == null) {
        context = inflater.getContext();
        view = inflater.inflate(R.layout.fragment_gridview, container, false); 
        ga = new GridViewAdapter(context);
        Btn_lang_Ch = (Button) view.findViewById(R.id.lng_ch);
        Btn_Settings = (Button) view.findViewById(R.id.button_settings);
        favoriteDuas = (Button) view.findViewById(R.id.btn_favorite_duas);
        GridMenu =(GridView) view.findViewById(R.id.gridView1);
        float scalefactor = getResources().getDisplayMetrics().density * 150;
        @SuppressWarnings("deprecation")
        int number = getActivity().getWindowManager().getDefaultDisplay().getWidth();
        int columns = (int) ((float) number / (float) scalefactor);
        GridMenu.setAdapter(ga);
        GridMenu.setNumColumns(columns);
    }
    else {
       // remove view from previously attached ViewGroup
       ViewGroup parent = (ViewGroup) view.getParent();
       parent.removeView(view);
    }    
    return view;
}
Другие вопросы по тегам