Показать Скрыть фрагмент в android
Я разрабатываю приложение, которое содержит 2 фрагмента и я хочу показать скрыть по моим параметрам. Следующий код имеет простой пример моей проблемы.
Этот простой Fragmentactivity содержит 1 кнопку и один listfragment.
этот простой пример работает безупречно. но меня не устраивает show hide fragment. Если вы удалите макет.setVisibility(вид.Ушел); из кода затем ft.скрыть (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
}
6 ответов:
Не связывайтесь с флагами видимости контейнера-FragmentTransaction.Скрыть/показать это внутренне для вас.
Так что правильный способ сделать это:
FragmentManager fm = getFragmentManager(); fm.beginTransaction() .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out) .show(somefrag) .commit();
или если вы используете android.поддержка.v4.приложение.Фрагмент
FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) .show(somefrag) .commit();
в addittion, вы можете сделать в фрагменте (например, при получении данных сервера не удалось):
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(); }
это сработало для меня
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); if(tag.equalsIgnoreCase("dashboard")){ DashboardFragment dashboardFragment = (DashboardFragment) fragmentManager.findFragmentByTag("dashboard"); if(dashboardFragment!=null) ft.show(dashboardFragment); ShowcaseFragment showcaseFragment = (ShowcaseFragment) fragmentManager.findFragmentByTag("showcase"); if(showcaseFragment!=null) ft.hide(showcaseFragment); } else if(tag.equalsIgnoreCase("showcase")){ DashboardFragment dashboardFragment = (DashboardFragment) fragmentManager.findFragmentByTag("dashboard"); if(dashboardFragment!=null) ft.hide(dashboardFragment); ShowcaseFragment showcaseFragment = (ShowcaseFragment) fragmentManager.findFragmentByTag("showcase"); if(showcaseFragment!=null) ft.show(showcaseFragment); } ft.commit();
попробуйте это:
MapFragment mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.mapview); mapFragment.getView().setVisibility(View.GONE);
Comments