在android中显示隐藏片段

我正在开发包含2个片段的应用程序,我想根据我的需要显示隐藏。 下面的代码是我的问题的简单例子。 这个简单的Fragmentactivity包含1个button和一个listfragment。

这个简单的例子工作完美无瑕。 但是我不满意show hide片段。 如果你删除layout.setVisibility(View.GONE); 从代码然后ft.hide(f); 不会隐藏片段。 实际上我们并没有隐藏我们隐藏容器的片段。

我的问题是,这是一个显示隐藏碎片的方法吗? 如果不是,那么请解释一下testing的例子,因为很多人都面临这个问题,所以如何隐藏和显示碎片。

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(); }