700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android Fragment实现一个底部导航栏切换页面(基本的Fragment用法)

Android Fragment实现一个底部导航栏切换页面(基本的Fragment用法)

时间:2023-12-02 09:53:56

相关推荐

Android Fragment实现一个底部导航栏切换页面(基本的Fragment用法)

用户界面UserActivity中包含两个Fragment,分别用来显示不同的应用功能,就像QQ中“聊天栏”“联系人”“动态”这三个底部导航栏之间的切换一样。

效果图:

在UserActivity对应的xml布局文件中加入一个Frame控件以容纳Fragment

<FrameLayoutandroid: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;@Overrideprotected 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);mit();//最后还需要使用commit()方法提交事务//通过以上几行,在打开UserActivity对应的这个页面时,将首先显示MonitorFragment.

//以下几行用来实现点击按键切换Fragmenti1=findViewById(R.id.i1);i2=findViewById(R.id.i2);i1.setOnClickListener(new View.OnClickListener() {@Overridepublic 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() {@Overridepublic 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基本概述 | 菜鸟教程 ()

( 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 fragmentView view=inflater.inflate(R.layout.fragment_monitor, container, false);user_reset=(ImageButton) view.findViewById(R.id.user_reset);user_reset.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(getActivity(),PrimarySettingActivity.class);startActivity(intent);}});return view;}

关于Toast用法

点击这个ImageButton时弹出提示文字“用户未登录”

在User_information_fragment中添加相关代码

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView 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() {@Overridepublic 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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。