Показать Скрыть фрагмент в 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
}
825   6  

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

    Ничего не найдено.