如何在android中获取backstack片段条目列表?

问题描述 投票:0回答:3

我正在开发一个应用程序,其中使用

FragmentActivity
实现选项卡。由于整个应用程序都需要选项卡,因此广泛使用片段以使应用程序兼容所有 Android 版本。

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

android tabs android-fragments back-stack
3个回答
110
投票

FragmentManager有方法:

getBackStackEntryCount()

getBackStackEntryAt(int索引)

FragmentManager fm = getFragmentManager();

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

0
投票

我已经使用此代码(在 Kotlin 中)实现了在返回堆栈中记录片段:

findNavController().backQueue.forEach {
        Log.d(TAG, "${it.destination}")
    }

此代码迭代导航返回堆栈中的每个条目,打印出片段的目标名称。


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

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

© www.soinside.com 2019 - 2024. All rights reserved.