簡體   English   中英

在浮動操作按鈕內導航

[英]Navigating inside a floating action button

我添加了主要活動。 我有一個 FAB 按鈕,我試圖通過單擊按鈕導航到其中一個片段。 但是我收到java.lang.IllegalArgumentException: navigation destination XXXXX/galleryFragment is unknown to this NavController不確定異常的原因是什么。 我是安卓開發新手,請原諒我的無知

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    // Passing each menu ID as a set of Ids because each
    // menu should be considered as top level destinations.
    mAppBarConfiguration = new AppBarConfiguration.Builder(
            R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
            .setDrawerLayout(drawer)
            .build();
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);

    FloatingActionButton fab = findViewById(R.id.fab);
    Navigation.setViewNavController(fab, navController);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Navigation.findNavController(view).navigate(R.id.galleryFragment);
        }
    });
}

Navigation.findNavController(view)僅在視圖位於NavHostFragmentNavHostFragment (即,它是由您的片段之一創建的視圖)。

如果您的FloatingActionButton位於NavHostFragment之外(例如在您的活動布局中),那么您需要使用您在onCreate()使用的相同內容: Navigation.findNavController(this, R.id.nav_host_fragment)

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Navigation.findNavController(this, R.id.nav_host_fragment).navigate(R.id.galleryFragment);
    }
});

您可以將navController存儲為全局變量,然后不要使用Navigation.findNavController ,使用navController.navigate

NavController navController = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);

    FloatingActionButton fab = findViewById(R.id.fab);

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            navController.navigate(R.id.galleryFragment);
        }
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM