androidx:使用一个片段中的按钮导航到另一个片段

gblwokeq  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(337)

我是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按钮从现有片段导航到这个新片段。
任何帮助都将不胜感激。

fkvaft9z

fkvaft9z1#

加上维卡斯说的话。他说,当你需要从一个活动变成碎片时,你需要 getSupportFragmentManager() 就像下面一样

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

注意我们需要如何在课堂上通过考试 ProfileFragment() 这里,它的布局 fragment_profile 将根据您的设置自行加载 ProfileFragment()fragment_profile 布局。
下一步你可能在将来想从一个 Fragment 在这种情况下,您只需添加 getActivity()getFragmentManager() ,所以会变成

@Override
public void onClick(View view){

 getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}
7gs2gvoe

7gs2gvoe2#

把一个碎片放到屏幕上你只需要一个碎片管理员。正如您在代码中看到的,当单击导航中的某个选项时,您是如何更改的,然后您正在调用

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 就这样。

相关问题