簡體   English   中英

Androidx:使用一個片段中的按鈕導航到另一個片段

[英]Androidx: Using a button in one fragment to navigate to another fragment

我是 android 開發的新手,一直在開發我的第一個應用程序,遇到了我理解的一個非常簡單的復雜問題,但我似乎無法解決它,我遇到的大多數在線資源都是過時的並包括已棄用的方法。 話雖如此,關於這個問題:

在我的 MainActivity.java 中,我使用了一個側邊抽屜導航,允許我在片段之間移動。 這是代碼:

@Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()) {
            case R.id.nav_home:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new HomeFragment()).commit();
                break;
            case R.id.nav_account:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AccountFragment()).commit();
                break;
            case R.id.nav_goals:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new GoalsFragment()).commit();
                break;
            case R.id.nav_progress:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProgressFragment()).commit();
                break;
            case R.id.nav_food_diary:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FoodDiaryFragment()).commit();
                break;
            case R.id.nav_nutrition:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NutritionFragment()).commit();
                break;
            case R.id.nav_settings:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();
                break;
        }

        drawer.closeDrawer(GravityCompat.START);
        return true;
    } 

所有這些片段之間的導航都完美無缺。 但我的問題是我有一個按鈕存在於這些片段之一上,我想用它把我帶到另一個無法通過導航抽屜訪問的片段。 讓我們稱之為fragment_profile 是否可以使用按鈕的 onclick 從現有片段導航到這個新片段。

任何幫助,將不勝感激。

補充 Vikas 所說的內容。 他告訴你,當你需要 go 從 Activity 到 Fragment 時,你需要像下面這樣的getSupportFragmentManager()

@Override
public void onClick(View view){
   getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}

請注意,我們需要如何在此處為 ProfileFragment ProfileFragment()傳遞 class,其布局fragment_profile將自行加載,因為您將使用fragment_profile布局設置ProfileFragment()

接下來,您將來可能希望 go 從一個Fragment到另一個片段,在這種情況下,您只需要在getFragmentManager() getActivity() ) ,這樣它就會變成

@Override
public void onClick(View view){
   
 getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}

要將片段放入屏幕,您只需要一個片段管理器。 正如您在代碼中看到的那樣,當導航中的一個選項被點擊時,您是如何更改的,然后您正在調用

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();

用所選片段替換現有片段。 當用戶點擊如下按鈕時完全相同。

//your click listener callback
@Override
public void onClick(View view){
   getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}

您唯一需要注意的是主機應該有片段容器fragment_container就是這樣。

暫無
暫無

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

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