我是编程新手。我有4种xml布局的4种工作活动。我还从一个教程中复制了这个简单的示例片段(我认为我需要4个活动中的4个片段):
public class SelectFriends extends Fragment {
public SelectFriends () {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_SelectFriends , container, false);
}
}
这是MainActivity的相关部分:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.navigation_item1:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.container, SelectFriends).commit();
return true;
case R.id.navigation_item2:
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.container, StartFood).commit();
return true;
[...]
}
return false;
}
当我将@Override public View onCreateView
中的fragment_SelectFriends替换为selectFriends.xml的ID时,就可以启动activitie的selectFriends.xml了。问题是我不知道将相应的Activity放在哪里,因此selectFriends.xml可以正确显示在BottomNavigation中,但是当然不可能进行交互。什么是最佳做法?互联网使我感到困惑:我是否理解错误使用片段的情况?当我想在不同的BottomNavigation显示中显示的内容彼此完全不同时,我什至不明白为什么我应该使用BottomNavigation制作片段。谢谢
答案 0 :(得分:0)
让我们从您的问题开始吧:
如何正确地将我的活动放在“教程的底部导航”中?
您将不会在底部导航中放置活动。
您将有一个Activity
,它将绘制屏幕的布局。其次,您将有多个Fragment
,它们代表屏幕的某些部分。
有多少Fragment
个?与“底部导航”的选项一样多。
以 Youtube应用为例。
整个屏幕是Activity
(Youtube的MainActivity)。您可以在底部导航中看到用户按下的订阅 ,因此MainActivity调用了SubscriptionsFragment
来绘制屏幕的订阅部分(除顶部是ActionBar,底部是底部导航。
如果用户在底部导航中选择“主页”,则MainActivity
将用SubscriptionsFragment
的布局替换HomeFragment
绘制其布局的屏幕部分。而YouTube底部导航栏的其他选项也会发生同样的事情。
因此请澄清。这里仅有一项活动。 MainActivity
。 不是四个。此活动命令4个片段来绘制其屏幕的4个主要部分(首页部分为HomeFragment
,趋势部分为TrendingFragment
,订阅部分为SubscriptionFragment
,最后是图书馆部分为LibraryFragment
。
您最近的评论:
我必须将上面发布的两段代码放在一起 上课?
不,您不必。不必创建一个文件,例如MainActivity.java(定义了MainActivity
的文件),然后在同一文件中定义Fragment
的类。
您想使用底部导航显示4个屏幕,对吗?为您的活动创建一个文件,并创建四个单独的文件,每个Fragment
一个。
示例:
您的第一个文件SelectFriends.java,其中定义了SelectFriends片段,如您上面所述。
public class SelectFriends extends Fragment {
public SelectFriends () {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_SelectFriends , container, false);
}
}
另外三个类似的文件,每个片段一个。
最后,正如您上面所述,再次进行您的活动。
public class MainActivity extends AppCompatActivity{
@Override
public void onCreate(Bundle savedInstanceState){
// ... some code here
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.navigation_item1:
..
// Here the activity figured out that the first item of the bottom navigation
// was clicked, so it calls the support fragment manager to display a fragment
// inside the container view
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.fade_in, R.anim.fade_out)
.replace(R.id.container, SelectFriends).commit();
return true;
case R.id.navigation_item2:
getSupportFragmentManager().beginTransaction()
.setCustomAnimations(R.anim.fade_in, R.anim.fade_out)
.replace(R.id.container, StartFood).commit();
return true;
}
return false;
}
}