2015-09-03 2 views
1

Я хочу переключить кнопку, чтобы показать мой фрагмент, когда он нажимается, и когда я нажимаю его снова, чтобы удалить фрагмент или скрыть его. основном ~ On: Показать Off: СкрытьAndroid: Toggle Button On: Показать фрагмент выключен: скрыть фрагмент

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    Shower_fragment shower_fragment = new Shower_fragment(); 
    android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(R.id.linear_shower, shower_fragment, "Shower"); 
    if(isChecked){ 
     fragmentTransaction.show(shower_fragment); 
     fragmentTransaction.commit(); 
    }else{ 
     fragmentTransaction.hide(shower_fragment); 
     fragmentTransaction.commit(); 

    } 
} 

ответ

0

Это работает, так оно и работает. : D ~ Обратите внимание на новый объект фрагмента в предложении Else.

ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton); 
    toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      Shower_fragment shower_fragment = new Shower_fragment(); 
      android.app.FragmentManager fragmentManager = getFragmentManager(); 

      if(null == fragmentManager){ 
       Toast.makeText(getApplication(), "Null Fragment Manager", Toast.LENGTH_LONG).show(); 
       return;} 

      if(isChecked){ 
       Toast.makeText(getApplication(),"If Clicked", LENGTH_SHORT).show(); 
       fragmentManager.beginTransaction() 
         .add(R.id.linear_shower, shower_fragment, "Shower") 
         .show(shower_fragment) 
         .commit(); 
      }else{ 
       Toast.makeText(getApplication(), "Else Clicked", LENGTH_SHORT).show(); 
       Shower_fragment shower_fragmentElse = (Shower_fragment) fragmentManager.findFragmentByTag("Shower"); 
       fragmentManager.beginTransaction() 
         .hide(shower_fragmentElse) 
         .commit(); 
      } 
     } 
    }); 

Кстати, где вы помещаете метод переопределения, не должно быть проблемой.

0

Я думаю, что ваш забыл назвать getFragmentManager();

Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
{ 
    Shower_fragment shower_fragment = new Shower_fragment(); 
    FragmentManager fm = getFragmentManager(); 

    if(null == fm){return;} 
    if(isChecked) 
    { 
    fm.beginTransaction(); 
     .add(R.id.linear_shower, shower_fragment, "Shower"); 
     .show() 
     .commit(); 
    }else 
    { 

    fm.beginTransaction(); 
     .add(R.id.linear_shower, shower_fragment, "Shower"); 
     .hide() 
     .commit(); 
    } 
} 
+0

У меня есть менеджер фрагментов, объявленный в классе, а затем инициализированный в моем методе onCreate, также у вас, похоже, проблема в части «else», она должна быть ft вместо fm для .hide(). Commit(); ~ Но даже это не работает. – AquaSolid

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