如何正确地将我的活动放在教程的底部导航中?
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 底部导航栏的其他选项上。
所以澄清一下。这里只有一个activity。 MainActivity
。 不是四个。这个 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;
}
}
我是编程新手。我有 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 底部导航栏的其他选项上。
所以澄清一下。这里只有一个activity。 MainActivity
。 不是四个。这个 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;
}
}