Java Androidx:使用一个片段中的按钮导航到另一个片段
我是android开发新手,一直在开发我的第一个应用程序,遇到了一个我理解为非常简单的复杂问题,但我似乎无法解决它,我遇到的大多数在线资源都已经过时,包括不推荐的方法。话虽如此,在这个问题上: 在MainActivity.java中,我使用一个侧抽屉导航,允许我在片段之间移动。代码如下: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
@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()”,它似乎已经解决了这个问题。非常感谢你。