gpt4 book ai didi

Android获取当前 fragment 的ID

转载 作者:太空狗 更新时间:2023-10-29 14:50:42 24 4
gpt4 key购买 nike

我实现了抽屉导航,但问题是按下后退按钮时,绘图中选中的项目与当前 fragment 不对应(仅通过抽屉导航实际添加的最后一个 fragment )

这里有一个解决方案:Updating the Navigation Drawer (with DrawerLayout) when back button is pressed

解决方案说明如下:

getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
FragmentManager fm = getSupportFragmentManager();
String stackName = null;
for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
stackName = fm.getBackStackEntryAt(entry).getName();
Log.i("BC", "stackEntry" + entry);
}
if (stackName == "Fragment1"){
mDrawerList.setItemChecked(0, true);
} else if (stackName == "Fragment2") {
mDrawerList.setItemChecked(1, true);
}

});

问题是有条件的。当您有很多项目时,必须手动更改要检查的导航项目的索引是一件痛苦的事情

我想做的是监听后台堆栈的变化,如果检测到,获取当前 fragment 的 ID(在布局文件中定义)并将其传递给 navigationView.setCheckedItem() 自动检查相应的导航项。像这样:

navigationView = (NavigationView) findViewById(R.id.nav_view);

navigationView.setCheckedItem(R.id.nav_new);

在我的 mainactivity 类中,如何以 R.id.xxx 的形式获取当前 fragment 的 ID,以便将其传递给 setCheckedItem

最佳答案

你可以这样做

在添加 fragment 时执行此操作

FragmentTransaction.addToBackStack(""+R.id.nav_new); // Use the id of navigation item which was clicked.

然后

getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
FragmentManager fm = getSupportFragmentManager();
String stackName = null;
for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
stackName = fm.getBackStackEntryAt(entry).getName();
Log.i("BC", "stackEntry" + entry);
}

int navItemId = -1;
try{
navItemId = Integer.parseInt(stackName);
} catch(NumberFormatException nfe) {
}

if(navItemId > 0){
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setCheckedItem(navItemId);
}
else
Log.e("", "Couldn't find the id");
});

注意: 当您在 FragmentManager 上使用 getName() 时,无论您在 addToBackStack 中传递什么,都会返回给您.BackStackEntry

关于Android获取当前 fragment 的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35626777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com