Android 如何正确地将我的活动放入教程&xB4;s的底部导航?

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

我是编程新手。我有4个工作活动和4个xml布局。我还从教程中复制了这个简单的示例片段(我想我的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时,我可以启动活动的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行(我甚至使用了模型层作为最佳实践)。那么我应该把所有代码放在哪里,包括