Android Fragment实现一个底部导航栏切换页面(基本的Fragment用法)
用户界面UserActivity中包含两个Fragment,分别用来显示不同的应用功能,就像QQ中“聊天栏”“联系人”“动态”这三个底部导航栏之间的切换一样。
效果图:
在UserActivity对应的xml布局文件中加入一个Frame控件以容纳Fragment
<FrameLayout android:id="@+id/monitor_frame" android:layout_width="match_parent" android:layout_height="669dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.0"/>
不同的Fragment将会被放在这个Frame框里边,点击监视器,将会显示MonitorFragment,点击主页,将会显示User_information_fragment
两个Fragment的布局文件就略去不写了,UserActivity中的代码如下:
public class UserActivity extends Activity { private ImageButton i1,i2;//i1和i2分别对应下边导航栏那两个按键 private MonitorFragment MF1; private User_information_fragment UF1; private FrameLayout monitor_frame; private FragmentManager fManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.user_interface); fManager=getFragmentManager(); monitor_frame=(FrameLayout) findViewById(R.id.monitor_frame); FragmentTransaction fTransaction = fManager.beginTransaction(); MF1=new MonitorFragment(); UF1=new User_information_fragment(); fTransaction.add(R.id.monitor_frame,MF1); fTransaction.show(MF1); fTransaction.commit();//最后还需要使用commit()方法提交事务 //通过以上几行,在打开UserActivity对应的这个页面时,将首先显示MonitorFragment.
//以下几行用来实现点击按键切换Fragment i1=findViewById(R.id.i1); i2=findViewById(R.id.i2); i1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { i1.setImageResource(R.drawable.monitor_chosed); i2.setImageResource(R.drawable.home);//关于这两行:点击按键后按键本身的样子也会发生改变,实现被选中的状态 MF1=new MonitorFragment(); getFragmentManager().beginTransaction().replace(R.id.monitor_frame, MF1).commit(); } }); i2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { i1.setImageResource(R.drawable.monitor); i2.setImageResource(R.drawable.home_chosed); UF1=new User_information_fragment(); getFragmentManager().beginTransaction().replace(R.id.monitor_frame, UF1).commit(); } }); } //隐藏所有fragment的函数,这个函数......似乎没用上,不过先搁在这吧 private void hideAllFragment(FragmentTransaction fragmentTransaction){ if(UF1 != null)fragmentTransaction.hide(UF1); if(MF1 != null)fragmentTransaction.hide(MF1); } }
参考:5.1 Fragment基本概述 | 菜鸟教程 (runoob.com)
( FragmentTransaction只能使用一次,每次使用都要调用FragmentManager 的beginTransaction()方法获得FragmentTransaction事务对象。)
在Activity中如果要跳转到其他Activity需要用到Intent
如:
Intent intent=new Intent(MainActivity.this,PrimarySettingActivity.class);
如果在Fragment中增加一个按键,点击按键跳转到其他Activity,也可以使用Intent,但是需要用getActivity()方法获取当前所在的Activity。
MonitorFragment:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view=inflater.inflate(R.layout.fragment_monitor, container, false); user_reset=(ImageButton) view.findViewById(R.id.user_reset); user_reset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(getActivity(),PrimarySettingActivity.class); startActivity(intent); } }); return view; }
关于Toast用法
点击这个ImageButton时弹出提示文字“用户未登录”
在User_information_fragment中添加相关代码
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view=inflater.inflate(R.layout.fragment_user_information_fragment, container, false); //点击头像框弹出提示信息 user_portrait=(ImageButton) view.findViewById(R.id.user_portrait); user_portrait.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast toast = Toast.makeText(getActivity(), "用户未登录",Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL , 0, 0); //设置显示位置 toast.show(); } }); return view; }
标签:
Android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)