Android 如何在FragmentA中编程FragmentB?
我正在申请一个学校项目,在FragmentA中编程某个FragmentB时遇到了麻烦。麻烦更大的是,即使我做了广泛的搜索,我也不知道该怎么做Android 如何在FragmentA中编程FragmentB?,android,android-fragments,Android,Android Fragments,我正在申请一个学校项目,在FragmentA中编程某个FragmentB时遇到了麻烦。麻烦更大的是,即使我做了广泛的搜索,我也不知道该怎么做 FragmentA到main活动正常工作(或者正常工作,因为不会发出任何错误)。我在MainActivity.java中使用了SwitchCase,它可以正常工作 MainActivity.java @Override protected void onCreate(Bundle savedInstanceState) {
FragmentA
到main活动
正常工作(或者正常工作,因为不会发出任何错误)。我在MainActivity.java
中使用了SwitchCase,它可以正常工作
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNavigationView = findViewById(R.id.navigation);
bottomNavigationView.setOnNavigationItemSelectedListener
(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.navigation_home:
selectedFragment = HomeScreenFragment.newInstance();
break;
case R.id.navigation_profile:
selectedFragment = ProfileScreenFragment.newInstance();
break;
case R.id.navigation_notifications:
selectedFragment = NotifScreenFragment.newInstance();
break;
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, selectedFragment);
transaction.commit();
return true;
}
});
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, HomeScreenFragment.newInstance());
transaction.commit();
}
}
ProfileScreenFragment.java(这就是我想要的FragmentB)
fragment\u profile\u screen2.xml(frame\u布局是我想要放置FragmentB
的地方)
xmlns:app=”http://schemas.android.com/apk/res-auto"
xmlns:tools=”http://schemas.android.com/tools"
android:layout\u width=“匹配父项”
android:layout\u height=“match\u parent”>
我应该如何或如何为FragmentB
编写代码,并将其放入ProfileScreenFragment.java
是否也可以在ProfileScreenFragment.java
中为选项卡使用SwitchCase
非常感谢你。如果我使用的代码中有任何需要澄清的地方,请随时询问。我仍在学习所有这些的基础知识,因此我对代码持50/50的看法。在ProfileScreenFragment中添加此片段
@Override
protected void onViewCreated(View view, Bundle savedInstanceState) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, FragmentB.newInstance());
transaction.commit();
}
对于选项卡布局,可以添加选项卡更改侦听器
TabLayout tabLayout = view.findViewById(R.id.tabs);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0: // Handle 1st tab item
break;
case 1: // Handle 2nd tab item
break;
case 2: // Handle 3rd tab item
break;
case 3: // Handle 4th tab item
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
非常感谢。成功了。如果可以的话,请回答我的后续问题。My fragment_profile_screen2.xml有一个AppBar>Toolbar>TabsItem(4项)。我是否能够像使用MainActivity.java那样使用SwitchCase来实现它?因为使用SwitchCases看起来更容易。谢谢,很好。感谢您在这个答案有效时投票表决。:)是的,你可以。每个片段都有自己的视图,因此您可以将其称为view.findByViewId。很抱歉,您能解释一下吗(我想将SwitchCase放在ProfileScreenFragment.java中,因为fragment\u profile\u screen2.xml已连接到它。我应该如何启动它?工具栏?表格布局?因为它是如何在MainActivity.java中启动的?为什么要这样做?您希望在“子片段”中执行什么操作您需要在it配置文件屏幕中显示哪些内容?MainActivity仅具有BottomNavigationView,我使用了导航项的片段,因此当用户点击(例如:)在NavigationView中,片段_Profile _screen2.xml和ProfileScreenFragment被调用。我认为当一个片段调用另一个片段时,情况会是一样的,或者我错了吗?如果没有多大意义,我很抱歉。
@Override
protected void onViewCreated(View view, Bundle savedInstanceState) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, FragmentB.newInstance());
transaction.commit();
}
TabLayout tabLayout = view.findViewById(R.id.tabs);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0: // Handle 1st tab item
break;
case 1: // Handle 2nd tab item
break;
case 2: // Handle 3rd tab item
break;
case 3: // Handle 4th tab item
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});