更改列表项底部选项卡的当前活动状态单击片段
change current active state of bottom tab on a list item click in a fragment
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Data data = mListDatas.get(i);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ThirdFragment thirdFragment = new ThirdFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("detail", data);
thirdFragment.setArguments(bundle);
transaction.replace(R.id.content,ThirdFragment).addToBackStack(null).commit();
BottomNavigationView navigation = (BottomNavigationView)view.findViewById(R.id.navigation_bottomview);
navigation.setSelectedItemId(R.id.navigation_third_tab);
}
});
在上面的代码中,我需要通过单击列表项在底部选项卡上打开一个新片段,
我可以打开一个新片段,但当前选项卡保持不变,即在重定向到第三个底部选项卡上的第三个片段后,当前选项卡即第二个选项卡处于活动状态。
如何在列表项单击时将底部选项卡的活动状态从第二个选项卡更改为第三个选项卡??
您的 activity 需要实施 BottomNavigationView.OnNavigationItemSelectedListener
。这可以简单地通过在 class 名称后添加 implements BottomNavigationView.OnNavigationItemSelectedListener
来完成,这样做是为了在单击底部菜单项之一时获得点击回调。
然后你需要覆盖 onNavigationItemSelected
函数,所以将下面的代码添加到你的 activity.
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.tab_1:
handleFragmentChange(Fragment_1.newInstance());
return true;
}
return false;
}
使用 findViewById 找到视图后,还要在同一个 activity 中添加 navigation.setOnNavigationItemSelectedListener(this);
。这样做是为了让系统知道您的 class 正在处理单击底部菜单时的事件,因此它会在您的 class.
中调用上述函数
return true 通知 android 系统它需要切换选项卡。
如果此代码位于片段中,则需要替换
BottomNavigationView navigation = view.findViewById(R.id.navigation_bottomview);
navigation.setSelectedItemId(R.id.navigation_third_tab);
之前
...commit();
并添加 getRootView(),因为您的 BottomNavigationView 位于主容器内 - root activity
BottomNavigationView navigation = view.getRootView().findViewById(R.id.navigation_bottomview);
navigation.setSelectedItemId(R.id.navigation_third_tab);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Data data = mListDatas.get(i);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ThirdFragment thirdFragment = new ThirdFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("detail", data);
thirdFragment.setArguments(bundle);
transaction.replace(R.id.content,ThirdFragment).addToBackStack(null).commit();
BottomNavigationView navigation = (BottomNavigationView)view.findViewById(R.id.navigation_bottomview);
navigation.setSelectedItemId(R.id.navigation_third_tab);
}
});
在上面的代码中,我需要通过单击列表项在底部选项卡上打开一个新片段,
我可以打开一个新片段,但当前选项卡保持不变,即在重定向到第三个底部选项卡上的第三个片段后,当前选项卡即第二个选项卡处于活动状态。
如何在列表项单击时将底部选项卡的活动状态从第二个选项卡更改为第三个选项卡??
您的 activity 需要实施 BottomNavigationView.OnNavigationItemSelectedListener
。这可以简单地通过在 class 名称后添加 implements BottomNavigationView.OnNavigationItemSelectedListener
来完成,这样做是为了在单击底部菜单项之一时获得点击回调。
然后你需要覆盖 onNavigationItemSelected
函数,所以将下面的代码添加到你的 activity.
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.tab_1:
handleFragmentChange(Fragment_1.newInstance());
return true;
}
return false;
}
使用 findViewById 找到视图后,还要在同一个 activity 中添加 navigation.setOnNavigationItemSelectedListener(this);
。这样做是为了让系统知道您的 class 正在处理单击底部菜单时的事件,因此它会在您的 class.
return true 通知 android 系统它需要切换选项卡。
如果此代码位于片段中,则需要替换
BottomNavigationView navigation = view.findViewById(R.id.navigation_bottomview);
navigation.setSelectedItemId(R.id.navigation_third_tab);
之前
...commit();
并添加 getRootView(),因为您的 BottomNavigationView 位于主容器内 - root activity
BottomNavigationView navigation = view.getRootView().findViewById(R.id.navigation_bottomview);
navigation.setSelectedItemId(R.id.navigation_third_tab);