底部导航未更改所选按钮

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

任何人都可以帮我解决这个问题吗?我是 Java 新手。 单击底部导航按钮时,它应该激活菜单。但只有主页按钮始终处于活动状态。单击其他按钮 更改活动颜色 1 秒。 1 秒后,活动颜色返回到第一个按钮。

public class BottomNavigation {

    public static void setupBottomNavigation(final Activity activity, final BottomNavigationView bottomNavigationView) {

        bottomNavigationView.setOnItemSelectedListener(item -> {
            if (item.getItemId() == R.id.bookList) {
                startActivity(activity, BookListActivity.class);
                bottomNavigationView.setSelectedItemId(R.id.bookList); //This line is not working
                return true;
            } else if (item.getItemId() == R.id.home) {
                startActivity(activity, MainActivity.class);
                return true;
            } else if (item.getItemId() == R.id.writerList) {
                startActivity(activity, WriterActivity.class);
                return true;
            } else if (item.getItemId() == R.id.libraryList) {
                startActivity(activity, LibraryActivity.class);
                return true;
            } else if (item.getItemId() == R.id.contactUs) {
                startActivity(activity, ContactActivity.class);
                return true;
            } else {
                return false;
            }
        });
    }

    private static void startActivity(@NonNull Activity activity, Class<?> cls) {
        activity.startActivity(new Intent(activity.getApplicationContext(), cls));
        activity.overridePendingTransition(0, 0);
    }
}

java android
1个回答
0
投票

作为快速解决方法,您可以在

selectedItemId
之前设置
setOnItemSelectedListener
。我建议将
selectedItemId
参数添加到您的
BottomNavigation#setupBottomNavigation
中,然后您可以使用
bottomNavigationView.setSelectedItemId(selectedItemId);
来设置所选项目。

public class BottomNavigation {

    public static void setupBottomNavigation(
            final Activity activity,
            final BottomNavigationView bottomNavigationView,
            int selectedItemId //Added this parameter
    ) {
        bottomNavigationView.setSelectedItemId(selectedItemId); //Set selected item


        bottomNavigationView.setOnItemSelectedListener(item -> {
            if (item.getItemId() == R.id.bookList) {
                startActivity(activity, BookListActivity.class);
                bottomNavigationView.setSelectedItemId(R.id.bookList); //This line is not working
                return true;
            } else if (item.getItemId() == R.id.home) {
                startActivity(activity, MainActivity.class);
                return true;
            } else if (item.getItemId() == R.id.writerList) {
                startActivity(activity, WriterActivity.class);
                return true;
            } else if (item.getItemId() == R.id.libraryList) {
                startActivity(activity, LibraryActivity.class);
                return true;
            } else if (item.getItemId() == R.id.contactUs) {
                startActivity(activity, ContactActivity.class);
                return true;
            } else {
                return false;
            }
        });
    }

    private static void startActivity(@NonNull Activity activity, Class<?> cls) {
        activity.startActivity(new Intent(activity.getApplicationContext(), cls));
        activity.overridePendingTransition(0, 0);
    }
}

问题

BottomNavigationView
不适合与活动一起使用,在您的代码中,您将在默认选定项目 0 的每个活动中创建新的
BottomNavigationView
。这就是为什么看起来没有选择项目,因为该活动被另一个活动替换一个。

现在您可以使用解决方法,但对于下一个应用程序,您应该使用带有底部导航的单个活动和项目片段。有很多免费资源和教程如何做到这一点,这个看起来不错 - Android 中的底部导航栏

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