android fragment 选项卡,Android利用Fragment实现Tab选项卡效果

利用Fragment实现Tab选项卡效果:

将RadioGroup与Fragment集合,实现tab选项卡效果,这里面最关键的几个文件:

1.FragmentTabAdapter类:

/**

*@Description:

*@Author:Nate Robinson

*@Since:2015-2-12

*/

public class FragmentTabAdapter implements RadioGroup.OnCheckedChangeListener

{

private List fragments; // 一个tab页面对应一个Fragment

private RadioGroup rgs; // 用于切换tab

private Activity activity; // Fragment所属的Activity

private int fragmentContentId; // Activity中所要被替换的区域的id

private int currentTab; // 当前Tab页面索引

private OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener; // 用于让调用者在切换tab时候增加新的功能

public FragmentTabAdapter(Activity activity, List fragments, int fragmentContentId, RadioGroup rgs)

{

this.fragments = fragments;

this.rgs = rgs;

this.activity = activity;

this.fragmentContentId = fragmentContentId;

// 默认显示第一页

android.app.FragmentTransaction ft = activity.getFragmentManager().beginTransaction();

ft.add(fragmentContentId, fragments.get(0));

ft.commit();

rgs.setOnCheckedChangeListener(this);

}

@Override

public void onCheckedChanged(RadioGroup radioGroup, int checkedId)

{

for(int i = 0; i < rgs.getChildCount(); i++)

{

if(rgs.getChildAt(i).getId() == (checkedId))

{

Fragment fragment = fragments.get(i);

FragmentTransaction ft = activity.getFragmentManager().beginTransaction();

getCurrentFragment().onPause(); // 暂停当前tab

// getCurrentFragment().onStop(); // 暂停当前tab

if(fragment.isAdded())

{

// fragment.onStart(); // 启动目标tab的onStart()

fragment.onResume(); // 启动目标tab的onResume()

}

else

{

ft.add(fragmentContentId, fragment);

}

showTab(i); // 显示目标tab

ft.commit();

// 如果设置了切换tab额外功能功能接口

if(null != onRgsExtraCheckedChangedListener)

{

onRgsExtraCheckedChangedListener.OnRgsExtraCheckedChanged(radioGroup, checkedId, i);

}

}

}

}

/**

* 切换tab

* @param idx

*/

private void showTab(int idx)

{

for(int i = 0; i < fragments.size(); i++)

{

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 左侧选项卡可以使用 TabLayout 实现,具体步骤如下: 1. 在布局文件中,将 TabLayout 和 ViewPager 包含在一个父容器中,例如 LinearLayout。 2. 设置 LinearLayout 的方向为水平方向。 3. 设置 TabLayout 的 layout_gravity 属性为 left 或 right,表示 TabLayout 在父容器的左侧或右侧。 4. 设置 TabLayout 的 app:tabMode 属性为 scrollable,表示可以滚动。 5. 设置 TabLayout 的 app:tabGravity 属性为 fill,表示 Tab 均分 LinearLayout。 6. 在代码中创建 Fragment,通过 FragmentPagerAdapterFragmentStatePagerAdapterFragment 添加到 ViewPager 中。 7. 将 ViewPager 与 TabLayout 关联起来,通过 setupWithViewPager() 方法实现。 示例代码如下: ``` <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="left" app:tabMode="scrollable" app:tabGravity="fill" /> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout> ``` 在 Activity 中,可以通过以下代码创建 FragmentPagerAdapterFragmentStatePagerAdapter: ``` public class MyPagerAdapter extends FragmentPagerAdapter { private List<Fragment> fragments; public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) { super(fm); this.fragments = fragments; } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public CharSequence getPageTitle(int position) { // 设置 Tab 的标题 return "Tab " + (position + 1); } } ``` 在 Activity 中,可以通过以下代码将 ViewPager 与 TabLayout 关联起来: ``` ViewPager viewPager = findViewById(R.id.view_pager); TabLayout tabLayout = findViewById(R.id.tab_layout); List<Fragment> fragments = new ArrayList<>(); fragments.add(new MyFragment()); fragments.add(new MyFragment()); fragments.add(new MyFragment()); MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), fragments); viewPager.setAdapter(pagerAdapter); tabLayout.setupWithViewPager(viewPager); ``` 其中,MyFragment 是自定义的 Fragment。 注意:这里的示例代码使用的是 Support Library,如果使用的是 AndroidX,需要将包名从 android.support 改为 androidx。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值