【问题标题】:How to get a list of backstack fragment entries in android?如何在android中获取backstack片段条目列表?
【发布时间】:2012-08-18 02:36:22
【问题描述】:

我正在开发一个使用FragmentActivity 实现选项卡的应用程序。由于整个应用程序都需要选项卡,因此片段被广泛用于使应用程序在所有版本的 android 上兼容。

因此,我在可视化后台堆栈中存在哪些片段时遇到了问题。我确信有一种方法可以检索 backstack 上的片段列表。谢谢。

【问题讨论】:

    标签: android tabs android-fragments back-stack


    【解决方案1】:

    FragmentManager 有方法:

    getBackStackEntryCount()

    getBackStackEntryAt(整数索引)

    FragmentManager fm = getFragmentManager();
    
    for(int entry = 0; entry<fm.getBackStackEntryCount(); entry++){
       Log.i(TAG, "Found fragment: " + fm.getBackStackEntryAt(entry).getId());
    }
    

    【讨论】:

    • getId 返回 backstack 的 id 而不是片段
    • 投反对票,因为这是错误的。如果你执行findFragmentById()并使用这些id,你将找不到片段。
    【解决方案2】:

    如果你想检查哪个片段是可见的,如果你知道片段所在的视图的id,首先你必须在onCreate()下面添加

        getSupportFragmentManager().addOnBackStackChangedListener(new OnBackStackChangedListener() {
    
      @Override
      public void onBackStackChanged() {
        Fragment f = getSupportFragmentManager().findFragmentById(R.id.content_frame);
        if (f != null){
          updateActionBarTitle(f);
        }
    
      }
    });
    
    private void updateActionBarTitle(Fragment fragment) {
            String fragClassName = fragment.getClass().getName();
    
            if (fragClassName.equals(FirstFragment.class.getName())) {
                setTitle("Home");
            } else if (fragClassName.equals(SecondFragment.class.getName())) {
                setTitle("Second");
            }
        }
    

    这将更新您在返回堆栈更改侦听器上的操作栏标题。

    【讨论】:

    • 如何回答所提出的问题?
    猜你喜欢
    • 2012-12-30
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多