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

Java Androidx:使用一个片段中的按钮导航到另一个片段,java,android,android-layout,android-fragments,Java,Android,Android Layout,Android Fragments,我是android开发新手,一直在开发我的第一个应用程序,遇到了一个我理解为非常简单的复杂问题,但我似乎无法解决它,我遇到的大多数在线资源都已经过时,包括不推荐的方法。话虽如此,在这个问题上: 在MainActivity.java中,我使用一个侧抽屉导航,允许我在片段之间移动。代码如下: @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch(item.getIt

我是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\u profile
。 是否可以通过单击按钮从现有片段导航到此新片段


如果您有任何帮助,我们将不胜感激。

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

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\u container
,就是这样。

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

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\u container
,就是这样。

补充Vikas所说的内容。 他告诉我们,当您需要从一个活动转到片段时,您需要
getSupportFragmentManager()
如下所示

@Override
public void onClick(View view){
   getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}
请注意我们需要如何为
ProfileFragment()
传入类。在这里,它的布局
fragment\u profile
将自行加载,因为您将使用
fragment\u profile
布局设置
ProfileFragment()

接下来,您可能希望将来从一个
片段转到另一个
片段,在这种情况下,您只需要在
getFragmentManager()
之前添加
getActivity()
,这样它就会变得

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

再加上维卡斯说的话。 他告诉我们,当您需要从一个活动转到片段时,您需要
getSupportFragmentManager()
如下所示

@Override
public void onClick(View view){
   getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}
请注意我们需要如何为
ProfileFragment()
传入类。在这里,它的布局
fragment\u profile
将自行加载,因为您将使用
fragment\u profile
布局设置
ProfileFragment()

接下来,您可能希望将来从一个
片段转到另一个
片段,在这种情况下,您只需要在
getFragmentManager()
之前添加
getActivity()
,这样它就会变得

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

我试着这样做,因为我认为这是最合乎逻辑的事情,但我仍然得到了一个错误。“无法解析方法”。但是我现在刚刚添加了“getActivity()”,它似乎已经修复了错误。谢谢。是的,需要getActivity来替换来自fragment的活动中的片段,我现在错过了添加。我尝试了这个,因为我认为这是最合乎逻辑的事情,但是我仍然得到了一个错误。“无法解析方法”。但是我现在刚刚添加了“getActivity()”,它似乎已经修复了错误。谢谢。是的,需要getActivity来替换来自fragment的activity中的片段,我现在没有添加这些片段。我试图从一个片段导航到另一个片段,所以添加了“getActivity()”,似乎已经解决了这个问题。非常感谢。我试图从一个片段导航到另一个片段,所以我添加了“getActivity()”,它似乎已经解决了这个问题。非常感谢你。