当前位置: 首页 > 知识库问答 >
问题:

Android Studio打开一个片段,但不更改底部导航菜单状态

酆浩邈
2023-03-14

我有一个按钮,让我改变片段,它成功地做到了这一点。我打开了新片段,但底部的导航菜单并没有改变它的样式。这是一个简单的底部导航菜单,因为它是,当您选择当前正在查看的片段时,它会使底部的片段文本变大,图标也变大。这就是问题所在,它不会改变菜单。

goButton = (ImageButton) SOMEView.findViewById(R.id.go_button);
    goButton.setOnClickListener(new View.OnClickListener()   {
        public void onClick(View v)  {
            System.out.println("Started");

            AppCompatActivity mainActivity = new MainActivity();
           ((MainActivity) mainActivity).bottomNavigation.findViewById(R.id.nav_info).callOnClick();
            Fragment nextFragment = new INFOFragment("second");
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.fragment_container, nextFragment );
            transaction.addToBackStack(null);
            transaction.commit();
        }
    });

信息片段:

public class INFOFragment extends Fragment {

public String state;
@SuppressLint("ValidFragment")
public INFOFragment(String state) {
    this.state = state;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    if(state.equals("first")) {
        System.out.println("info");
    return inflater.inflate(R.layout.fragment_info, container, false);
    }
    else {
        System.out.println("second state started");
        return inflater.inflate(R.layout.fragment_another_view, container, false);
    }
}}

主要活动:

public class MainActivity extends AppCompatActivity {
public BottomNavigationView bottomNavigation;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bottomNavigation = findViewById(R.id.bnavigation);
    bottomNavigation.setOnNavigationItemSelectedListener(navigationListener);
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new INFOFragment("first")).commit();
    bottomNavigation.setSelectedItemId(R.id.nav_info);
}

private BottomNavigationView.OnNavigationItemSelectedListener navigationListener =
        new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Fragment selectedFragment = null;
                switch(item.getItemId()) {
                    case R.id.nav_another_view:
                        System.out.println("vid ovo");
                        selectedFragment = new ANOTHERVIEWFragment();
                        break;
                    case R.id.nav_info:
                        System.out.println("v2id ovo");
                        selectedFragment = new INFOFragment("prvi");
                        break;
                    case R.id.nav_some_view:
                        selectedFragment = new SOMEFragment();
                        break;
                }
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
                return true;
            }
        };}

共有1个答案

洪知
2023-03-14

步骤1:在MainActivity上创建一个常量,如下所示

int prev_nav_item = 0;

第2步:

private BottomNavigationView.OnNavigationItemSelectedListener navigationListener =
        new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Fragment selectedFragment = null;
                switch(item.getItemId()) {
                    case R.id.nav_another_view:
                        System.out.println("vid ovo");
                        selectedFragment = new ANOTHERVIEWFragment();
                        prev_nav_item = 0;
                        break;
                    case R.id.nav_info:
                        System.out.println("v2id ovo");
                        selectedFragment = new INFOFragment("prvi");
                        prev_nav_item = 1;
                        break;
                    case R.id.nav_some_view:
                        selectedFragment = new SOMEFragment();
                        prev_nav_item = 2;
                        break;
                }
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
                return true;
            }
        };}

第3步:创建一个函数来更改主活动中的底部菜单位置

public void selectBottomMenu(final int position) {
        Handler uiHandler = new Handler();
        uiHandler.post(new Runnable() {
            @Override
            public void run() {
                bottomNavigation.setCurrentItem(position);
            }
        });
    }

步骤3:从每个片段更新底部菜单位置,如onResume()中的

@Override
    public void onResume() {
        super.onResume();
        ((MainActivity) mActivity).selectBottomMenu(0); //change value depending on your bottom menu position
    }
 类似资料:
  • 我有底部的导航栏,点击导航栏中的项目,我正在替换片段。我有3个片段A、B、C,所以点击B项B片段被加载,在B中我调用3-4个API。所以现在如果我转到C,然后再次转到B,将创建一个新的B片段实例,并再次调用这些API,那么如何保存片段实例状态,并且在更改片段时不再调用API。这是我的密码。 我已经在MainActivity的onCreate中初始化了上面的片段成员变量

  • 我有一个关于底部导航栏的奇怪问题,虽然我花了大量时间在它上面,但我无法解决。当我以“推荐”的方式(从许多教程中)使用它时,它就是无法导航。 那么,我所说的“推荐”方式是什么意思呢:我有一个单独的acticity,其中有一个名为“MainActivity”的navHostFragment。这个主要活动有一个XML布局文件,我将底部导航栏放在其中。BottomNavigationBar还有一个XML布

  • 我创建了一个带有“底部导航活动”的新项目: 这是生成的代码: 如何使用底部栏更改为新片段?例如,我有3个片段:Fragment1 Fragment2和Fragment3,我想用底部栏中的3个按钮更改为它们。我还想通过左右滑动手指来切换片段,我该怎么做?

  • 我想在我的项目中包括底部导航菜单,但它不起作用。底部导航菜单中没有显示菜单图标。我使用的是Android Studio北极狐。我做了所有正确的步骤,但仍然面临问题。这是我的代码,请帮我解决这个问题。谢谢。 主要活动Xml res\菜单\底部导航菜单 build.gradle 主题。xml

  • 我希望我的应用程序更改片段视图和底部导航菜单中的选定项目。我尝试过这样做: 它改变了片段,但在底部导航菜单中选择的项目没有改变。我试着做了

  • 本文向大家介绍Flutter实现底部菜单导航,包括了Flutter实现底部菜单导航的使用技巧和注意事项,需要的朋友参考一下 简介 现在我们的 APP 上面都会在屏幕下方有一排的按钮,点击不同的按钮可以进入不同的界面。就是说在界面的底部会有一排的按钮导航。可看下面的图示。 完成图示 程序工程目录 梳理下实现步骤 我们需要实现这个底部菜单导航,就需要有底部菜单的那一排图标按钮。图标按钮是固定在一个工具