как показать скрыть фрагмент?

У меня есть Activity с четырьмя кнопками внизу, как вкладки. При нажатии любой кнопки новый фрагмент отображается в FrameLayout над этими кнопками, как мы это делаем в TabActivity. См. Моя проблема здесь. Теперь я думаю, что должен найти способ скрыть и показать эти фрагменты. Подскажите, пожалуйста, как показать и скрыть фрагмент, не перезагружая его снова.

Основная цель показа скрытия фрагмента — сохранить его текущее состояние. В одном из моих фрагментов у меня есть AsyncTask, когда я переключаюсь между фрагментами, он снова вызывает этот AsynTask.


person AndroidGeek    schedule 16.07.2014    source источник


Ответы (2)


// показать фрагмент, когда он скрыт

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
          .show(fragment1)
          .commit();

// чтобы скрыть фрагмент

FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction()
          .hide(fragment1)
          .commit();
person Orhan Obut    schedule 16.07.2014
comment
СПАСИБО ЗА КОД +10 - person AndroidGeek; 17.07.2014

вы не можете пройти мимо какого-то вида, как

объявить 4 frameLayout

private FrameLayout fragment1;
private FrameLayout fragment2;
private FrameLayout fragment3;
private FrameLayout fragment4;

а также

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment1, Fragment1.newInstance());
ft.replace(R.id.fragment2, Fragment2.newInstance());
ft.replace(R.id.fragment3, Fragment3.newInstance());
ft.replace(R.id.fragment4, Fragment4.newInstance());
ft.commit();

и играть с видимыми или ушли? подобно

fragment1.setVisibility(View.Visible);
fragment2.setVisibility(View.gone);
fragment3.setVisibility(View.gone);
fragment4.setVisibility(View.gone);

и кстати: у меня работает -> активность открытого класса расширяет ActionBarActivity {

private FrameLayout fragment1;
private FrameLayout fragment2;

private Button bt1;
private Button bt2;

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

    fragment1 = (FrameLayout) findViewById(R.id.fragment1);
    fragment2 = (FrameLayout) findViewById(R.id.fragment2);

    bt1 = (Button) findViewById(R.id.button);
    bt2 = (Button) findViewById(R.id.button2);

    bt1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            fragment1.setVisibility(View.VISIBLE);
            fragment2.setVisibility(View.GONE);
        }
    });

    bt2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            fragment1.setVisibility(View.GONE);
            fragment2.setVisibility(View.VISIBLE);
        }
    });

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment1, new Fragment1());
    ft.replace(R.id.fragment2, new Fragment2());
    ft.commit();
}
person u53r    schedule 16.07.2014
comment
фрагменты не являются представлениями. Они являются object.setVisiblity недопустимым способом. Прочитайте связанный вопрос фрагменты" title="асинтаск выполняется повторно при переключении между фрагментами"> stackoverflow.com/questions/24774631/ - person AndroidGeek; 16.07.2014
comment
да, но framelayout просматривается. вы можете играть прямо с этим представлением - person u53r; 16.07.2014
comment
у меня есть только один frameLayout в xml. который я хочу заменить другим, как мы делаем в TabActivity. И заменить сделать две работы вместе удалить и добавить. Я имею в виду ЗАМЕНИТЬ == (УДАЛИТЬ ТЕКУЩИЙ ФРАГМЕНТ + ДОБАВИТЬ ДРУГОЙ ФРАГМЕНТ) - person AndroidGeek; 17.07.2014
comment
я не уверен, что понимаю, чего ты действительно хочешь, чувак, извини... в этом случае это совершенно нормально, что ты перезагружаешь фрагмент - person u53r; 17.07.2014