Android 如何正确地将我的活动放入教程&xB4;s的底部导航?
我是编程新手。我有4个工作活动和4个xml布局。我还从教程中复制了这个简单的示例片段(我想我的4个活动需要4个示例片段):Android 如何正确地将我的活动放入教程&xB4;s的底部导航?,android,bottomnavigationview,Android,Bottomnavigationview,我是编程新手。我有4个工作活动和4个xml布局。我还从教程中复制了这个简单的示例片段(我想我的4个活动需要4个示例片段): public class SelectFriends extends Fragment { public SelectFriends () { // Required empty public constructor } @Override public View onCreateView(LayoutInflater
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时,我可以启动活动的selectFriends.xml。问题是我不知道将相应的活动放在哪里,因此selectFriends.xml会正确地显示在BottomNavigation中,但当然,没有交互。什么是最佳实践?互联网让我困惑:我是否理解碎片的使用?我甚至不明白为什么我要用BottomNavigation制作片段,因为我想在不同的BottomNavigation显示中显示的内容彼此完全不同。谢谢让我们从您的问题开始:
如何正确地将我的活动放在教程的底部导航中
您不会将活动放在底部导航中
您将有一个活动
,它将绘制屏幕的布局。其次,您将有一些片段
,它们将代表屏幕的某些部分
有多少个片段
?尽可能多的底部导航选项。
以Youtube应用程序为例
整个屏幕是一个活动
,Youtube的主要活动。正如您可以在底部导航中看到的用户按下了订阅,因此主活动调用了订阅片段
,以绘制屏幕的订阅部分(除顶部的操作栏和底部的导航外的所有布局)
如果用户在底部导航中选择Home,则main活动将用HomeFragment
的布局替换SubscriptionsFragment
绘制布局的屏幕部分。Youtube底部导航栏的其他选项也会发生同样的情况
为了澄清这一点,这里只有一个活动。main活动
不是四个。此活动命令4个片段来绘制其屏幕的4个主要部分(带有HomeFragment
的主页部分,带有TrendingFragment
的趋势部分,带有SubscriptionFragment
的订阅部分,最后是带有LibraryFragment
的库部分
从你最后的评论:
我必须把我上面发布的两段代码放到一个大文件中
上课
不,您不必这样做。不必创建一个文件,例如MainActivity.java(定义了MainActivity
),然后在同一个文件中定义片段的类
您希望使用底部导航显示4个屏幕,对吗?为您的活动创建一个文件和四个单独的文件,每个片段一个
例如:
您的第一个文件,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;
}
}
编辑:阅读我注意到这至少是你第三次发布同样的问题(,)。首先,请不要重复问题。简单地用您拥有的任何新信息、您尝试过的任何新代码编辑您的原始帖子,或解释任何帖子答案不起作用的原因,都会将其推到活动队列的顶部。其次,您似乎对活动和碎片的性质有根本性的误解片段。片段与活动没有一对一的对应关系,对于每个片段
类,您也不需要单独的活动
类。单个活动
可以承载和操作多个片段
,这似乎就是您想要做的。如果您说您有“4个工作活动和4个xml布局",似乎您实际上希望在单个活动中托管四个片段
。如果是这种情况,您只需在单个活动
@Mike M中处理相关的片段
。感谢您的回复,您似乎理解我的问题。我的问题是如何处理相关的F单个活动中的片段?通过将所有4个活动放在公共类SelectFriends extends片段中的某个位置?这不是因为电池耗尽的错误做法吗:每次打开应用程序时,即使用户打算只使用一小部分(1个活动),也必须加载大的活动代码如@Mike M.所述,你需要一个活动来容纳你的其他4个碎片。创建活动后,它将加载第一个碎片。然后,如果你按下导航中的按钮,该活动将用另一个碎片替换当前碎片,依此类推…@Skemelio如果我理解正确,我必须放置两个碎片我在上面发布到一个大类中的代码,以及“//Required empty public constructor”对应的活动被错误写入。然后我对其他3个活动执行相同的操作:我编写了一个新类“StartFood”如果我错了,你能给我一个简短的例子吗?非常感谢!谢谢你的回答。我理解你告诉我的一切,就像我以前假设的那样。我也阅读了你链接的教程和更多的教程。但是在开始所有这些博文之前,我应该把我已经创建的所有活动放在哪里呢ttomNavigation的东西?我已经有了至少4个活动,每一个都超过400行(我甚至使用了模型层作为最佳实践)。那么我应该把所有代码放在哪里,包括