如何正确地将我的活动放在教程的底部导航中?

How to correctly put my activities in Tutorial´s Bottom Navigation?

我是编程新手。我有 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;
    }

当我用 selectFriends.xml 的 ID 替换 @Override public View onCreateView 中的 fragment_SelectFriends 时,我可以开始我的活动 selectFriends.xml 。问题是我不知道把相应的 Activity 放在哪里,所以 selectFriends.xml 使用 BottomNavigation 正确显示,但当然不可能进行交互。什么是最佳实践?互联网让我感到困惑:我理解片段的使用是错误的吗?当我想在不同的 BottomNavigation 显示中显示的内容彼此完全不同时,我什至不明白为什么我应该使用 BottomNavigation 制作片段。谢谢

让我们从你的问题开始:

How to correctly put my activities in Tutorial´s Bottom Navigation?

您不会将您的活动放在底部导航中。

您将有一个 Activity 来绘制屏幕布局。其次,您将有许多 Fragment,它们将代表您屏幕的某些部分。

有多少 Fragment?与底部导航的选项一样多。 以 Youtube 应用程序 为例。

整个屏幕就是一个Activity,Youtube的MainActivity。如您所见,用户在底部导航中按下了订阅 ,因此 MainActivity 调用了 SubscriptionsFragment 来绘制屏幕的订阅部分(除了顶部的 ActionBar 和底部的 Bottom Navigation 之外的所有布局。

如果用户在底部导航中选择主页,则 MainActivity 将用 HomeFragment 的布局替换 SubscriptionsFragment 绘制其布局的屏幕部分。同样的事情也会发生在 Youtube 底部导航栏的其他选项上。

所以澄清一下。这里只有一个activityMainActivity不是四个。这个 activity 命令 4 个片段来绘制其屏幕的 4 个主要部分([=19= 的主页部分,TrendingFragment 的趋势部分,SubscriptionFragment 的订阅部分,最后LibraryFragment.

的库部分

来自您最后的评论:

I have to put the two pieces of code that I posted above into one big class?

不,你不必这样做。没有必要创建一个文件,例如 MainActivity.java(其中定义了 MainActivity),然后在同一个文件中定义 Fragment 的 类。

您想使用底部导航显示 4 个屏幕,对吗?为您的 activity 创建一个文件和四个单独的文件,每个文件一个 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);
    }

}

另外三个像这样的独立文件,每个片段一个。

最后是您的 activity,正如您在上面发布的那样。

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;
        }
    } 

编辑:阅读 Ultimate Guide to Bottom Navigation on Android