Android Fragments 如何在android中获取backstack fragment条目列表?

1sbrub3j  于 2023-11-19  发布在  Android
关注(0)|答案(3)|浏览(129)

我正在开发一个使用FragmentActivity实现标签的应用程序,因为标签在整个应用程序中都需要,所以广泛使用片段来使应用程序兼容所有版本的android。
因此,我面临着一个问题,在可视化的碎片是目前在backstack上。我相信有一个的方法来检索的碎片列表目前在backstack上。谢谢。

um6iljoc

um6iljoc1#

FragmentManager有以下方法:

getBackStackEntryCount()

getBackStackEntryAt(int index)**

FragmentManager fm = getFragmentManager();

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

字符串

gcuhipw9

gcuhipw92#

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

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

字符串
这段代码遍历导航返回堆栈中的每个条目,打印出Fragment的目标名称。

anhgbhbe

anhgbhbe3#

如果你想检查哪个片段是可见的,如果你知道片段所在的视图的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");
        }
    }

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

相关问题