Показать скрытый фрагмент в android

Я разрабатываю приложение, которое содержит 2 фрагмента, и я хочу показать шкуру в соответствии с моей потребностью. Следующий код имеет простой пример моей проблемы. Эта простая функция фрагментации содержит 1 кнопку и один фрагмент списка.

Этот простой пример работает безупречно. Но я не доволен фрагментом show hide. Если вы удалите layout.setVisibility (View.GONE); Из кода, затем ft.hide (f); Не будет скрывать фрагмент. На самом деле мы не скрываем фрагмент, который мы скрываем.

Мой вопрос: это способ показать скрытые фрагменты? Если нет, объясните, пожалуйста, пример с примерами. Как скрыть и показать фрагменты, потому что многие люди сталкиваются с этой проблемой.

public class MainActivity extends FragmentActivity implements OnClickListener { Fragment1 f; Button b; LinearLayout layout; Fragment myf; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b = (Button) findViewById(R.id.button1); layout = (LinearLayout) findViewById(R.id.ll); f = new Fragment1(); } @Override public void onClick(View v) { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); if (f.isHidden()) { ft.show(f); layout.setVisibility(View.VISIBLE); b.setText("Hide"); } else { ft.hide(f); b.setText("Show"); layout.setVisibility(View.GONE); } ft.commit(); // TODO Auto-generated method stub } 

Не связывайтесь с флагами видимости контейнера – FragmentTransaction.hide / show делает это внутри вас.

Поэтому правильный способ сделать это:

 FragmentManager fm = getFragmentManager(); fm.beginTransaction() .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) .show(somefrag) .commit(); 

ИЛИ если вы используете android.support.v4.app.Fragment

  FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .show(somefrag) .commit(); 

В добавлении вы можете сделать это в фрагменте (например, при сбое данных сервера):

  getView().setVisibility(View.GONE); 

Привет, вы делаете это, используя этот подход, все фрагменты останутся в контейнере, как только добавлены первоначально, а затем мы просто покажем желаемый фрагмент и спрячем других в контейнере.

 // Within an activity private FragmentA fragmentA; private FragmentB fragmentB; private FragmentC fragmentC; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { fragmentA = FragmentA.newInstance("foo"); fragmentB = FragmentB.newInstance("bar"); fragmentC = FragmentC.newInstance("baz"); } } // Replace the switch method protected void displayFragmentA() { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); if (fragmentA.isAdded()) { // if the fragment is already in container ft.show(fragmentA); } else { // fragment needs to be added to frame container ft.add(R.id.flContainer, fragmentA, "A"); } // Hide fragment B if (fragmentB.isAdded()) { ft.hide(fragmentB); } // Hide fragment C if (fragmentC.isAdded()) { ft.hide(fragmentC); } // Commit changes ft.commit(); } 

Дополнительную информацию см. На странице https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments . Надеюсь, я помогу кому-нибудь. Даже если это старый вопрос.

 public void showHideFragment(final Fragment fragment){ FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out); if (fragment.isHidden()) { ft.show(fragment); Log.d("hidden","Show"); } else { ft.hide(fragment); Log.d("Shown","Hide"); } ft.commit(); }