我创建了一个新的项目“底部导航活动”:
的数据
这是生成的代码:
package com.aaron.waller.mrpolitik;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextMessage;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
mTextMessage.setText(R.string.title_home);
case R.id.navigation_dashboard:
mTextMessage.setText(R.string.title_dashboard);
case R.id.navigation_notifications:
mTextMessage.setText(R.string.title_notifications);
}
return true;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextMessage = (TextView) findViewById(R.id.message);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
}
字符串
我怎样才能改变到新的碎片与底部酒吧?例如,我有三个片段:Fragment1、Fragment2和Fragment3我想用底部栏的3个按钮更改为它们。我还想通过左右滑动手指来切换碎片,我该怎么做呢?
9条答案
按热度按时间du7egjpx1#
我的做法是,首先添加三个与此类似的方法(每个方法对应一个片段)。将布局名称和片段对象替换为要切换到的适当片段):
字符串
所以你的switch语句最终看起来像这样:
型
至于通过向两侧滑动来切换片段,我相信你需要一个ViewPager。
wlp8pajw2#
这很“简单”。
1.创建你的碎片。假设我们想要3个片段;
FragmentA
、FragmentB
和FragmentC
,其中FragmentA
是我们希望在BottomNavigationView上显示的第一个片段。1.在Activity中,转到
onNavigationItemSelected
方法并将内容更改为:字符串
1.在
onCreate()
方法中,执行以下操作:型
如果未在
onCreate()
中添加FragmentA
,则在首次启动Activity时,该Activity为空。如果您想知道
R.id.content
指的是什么,它是Activity布局中的Framelayout的ID。它最初包含一个TextView
,删除TextView,使其看起来像这样:型
最后,
ft
和currentFragment
是这样定义的:型
不确定优雅与否,但这很有效。
rbl8hiat3#
最好的方法是使用
ViewPager
和FragmentPagerAdapter
。因为它能把里面的碎片兑现。使用setOnNavigationItemSelectedListener
和BottomNavigationView
来监听用户的点击。并使用viewPager.setCurrentItem(..)
在页面之间移动。每次用户单击底部导航视图中的项目时创建一个新片段并不是一个好的解决方案(尤其是当用户单击他当前所在的屏幕项目时,上面的解决方案将创建一个新片段,即使在这种情况下)
lx0bsm1f4#
如果你使用的是Jetpack Navigation,你可以通过下面的代码切换片段。
字符串
有关更多信息,请参阅此文档:https://codelabs.developers.google.com/codelabs/android-navigation/#0
wbrvyc0a5#
字符串
gjmwrych6#
简单的方法是使用导航组件:
字符串
j5fpnvbx7#
还有另一种避免重新创建片段的方法--
fm.beginTransaction().hide(active).show(aimFragment)
我的例子如下(只是从我最近的项目复制):
字符串
它看起来很有效率,在你旋转手机之前会工作得很好。我通过将清单文件中的以下代码添加到Activity中以保留片段状态来修复它。(例如
AndroidManifest.xml
):型
lbsnaicq8#
这是我的建议方式,它有一个理想的性能,我做了它与使用
naveController
和androidx.navigation:navigation
步骤1:将导航依赖项添加到应用程序级
build.gradle
文件。这将允许您在应用中使用导航组件。字符串
步骤2:为底部导航栏创建新的菜单资源文件。此文件将包含将在栏中显示的菜单项。要创建新的菜单资源文件,请右键单击“项目”面板中的res文件夹,选择
New > Android resource file
,并将“资源类型”设置为“菜单”。步骤3:在菜单资源文件中,添加将在底部导航栏中显示的菜单项。每个菜单项都应该有一个唯一的ID和标题。举例来说:
型
步骤4:在要显示底部导航栏的布局文件中,添加BottomNavigationView元素。举例来说:
型
注意,app:menu属性被设置为在步骤2中创建的菜单资源文件的名称。
步骤5:在将承载底部导航栏的Activity或片段中,使用findNavController()方法创建NavController的示例,并将BottomNavigationView作为参数传入。举例来说:
型
请注意,每个片段都由一个唯一的ID标识,该ID对应于底部导航栏中菜单项的ID。
就是这样!通过这些步骤,你现在应该有一个基本的底部导航栏,可以用来替换应用程序中的不同片段。
qnzebej09#
你可以用这个
字符串