1

У меня есть один FragmentActivity с Buttons в нем и три класса Fragment. Если нажать кнопку 1, я хочу показать FragmentOne и скрыть FragmentTwo, FragmentThree. и если щелкнуть Button2, я хочу показать FragmentTwo и скрыть FragmentOne, FragmentThree и наоборот. Мой код не работал.Скрытие/отображение фрагментов в Android

private void fManager() { 

    FragmentManager manager = getSupportFragmentManager(); 

    f1 = manager.findFragmentById(R.id.first); 
    f2 = manager.findFragmentById(R.id.second); 
    f2 = manager.findFragmentById(R.id.third); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.button1: 
     if (b1.isPressed()) { 
      FragmentTransaction transaction = getSupportFragmentManager() 
        .beginTransaction(); 
      transaction.hide(f2); 
      transaction.hide(f3); 
      transaction.show(f1); 
          transaction.commit(); 
     } 
     break; 
    case R.id.button2: 
     if (b2.isPressed()) { 
      FragmentTransaction transaction = getSupportFragmentManager() 
        .beginTransaction(); 
      transaction.hide(f1); 
      transaction.hide(f3); 
      transaction.show(f2); 
          transaction.commit(); 
     } 
     break; 
    case R.id.button3: 
     if (b3.isPressed()) { 
      FragmentTransaction transaction = getSupportFragmentManager() 
        .beginTransaction(); 
      transaction.hide(f1); 
      transaction.hide(f2); 
      transaction.show(f3); 
         transaction.commit(); 
     } 
     break; 
    } 

} 

enter image description here

ответ

1

Вы должны commit транзакции:

transaction.commit(); 

Также отметим, что show() и hide() будет работать только для фрагментов, добавленных в контейнер (например, т.е. FrameLayout), поэтому если у вас есть ваши фрагменты, определенные непосредственно в XML, тогда вы, возможно, не сможете сделать это так, как вы пытаетесь. Также, если вы используете контейнеры, просто делайте регулярные setVisibility() на них вместо того, чтобы иметь дело с фрагментами - эффект будет точно таким же.

+0

менеджер или сделка? Я попробовал 'transaction.commit();' он не работал. – DroidLearner

+0

должен быть транзакцией. Также см. Править –

+0

Проверьте мой код здесь http://pastebin.com/STkUKuSi и дайте мне знать, где писать setVisibility(); – DroidLearner

1

Это просто опечатка или вы используете то же имя var для ссылки на два объекта?

f2 = manager.findFragmentById(R.id.second); 
f2 = manager.findFragmentById(R.id.third); 

Если вы хотите иметь некоторую информацию о дать операциям Устанавливается посмотреть на моем блоге, here.

 Смежные вопросы

  • Нет связанных вопросов^_^