Android使用RadioGroup + ViewPager制作底部导航栏

本文详细介绍了如何在Android项目中创建一个带有ViewPager和RadioGroup的界面,通过Fragment动态切换展示内容,并实现RadioGroup的选中状态控制。步骤包括创建Fragment、设置ViewPager适配器和为两者设置监听器。
摘要由CSDN通过智能技术生成

①首先创建一个空项目。在对应的layout文件中,使用linearlayout布局,上面为一个androidx.viewpager.widget.ViewPager,下面是一个RadioGroup,根据自己的情况,可以设置radiobutton。

代码如下:省略了几个RadioButton

<androidx.viewpager.widget.ViewPager
    android:id="@+id/vp_dist"
    android:layout_weight="10"
    android:layout_width="match_parent"
    android:layout_height="0dp"/>

<RadioGroup
    android:id="@+id/rg_navi"
    android:layout_weight="1"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="0dp">
    <RadioButton
        android:id="@+id/rb_1"
        android:text="窗口1"
        android:checked="true"
        android:button="@null"
        android:textColor="@color/navi_selector"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"/>


</RadioGroup>

②有多少个按钮就创建多少个Fragment
New->Fragment->Fragment(Blank)
在这里插入图片描述

其中的代码保持为如下即可,记住,要有对应的layout文件,为每个布局需要显示的内容。inflate参数第一个参数,为对应的layout文件名

public class Fragment1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_1, container, false);
    }
}

③mainactivity的代码
主要分几步,设置ViewPager的适配器,然后为viewpager和radiogroup分别设置监听即可。

public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private RadioGroup radioGroup;
    private List<Fragment> pages;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        radioGroup=findViewById(R.id.rg_navi);
        viewPager=findViewById(R.id.vp_dist);
        //为viewpager设置适配器
        pages=new ArrayList<>();
        pages.add(new Fragment1());
        pages.add(new Fragment2());
        pages.add(new Fragment3());
        pages.add(new Fragment4());

        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @NonNull
            @Override
//得到显示页面的位置
            public Fragment getItem(int position) {
                return pages.get(position);
            }

            @Override
            public int getCount() {
                return pages.size();
            }
        });




        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            //当页面左右滚动时会触发
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            //页面已经滑动成功了,手指抬起来时会触发,position表示当前滑动到的页面,页面从0-len-1
            public void onPageSelected(int position) {
                //radioGroup的getChildAt方法,字button的序号从0开始,按照布局中定义,从0依次递增
                RadioButton radioButton= (RadioButton) radioGroup.getChildAt(position);
                radioButton.setChecked(true);
            }

            @Override
            //state为0 1 2当用手指滑动翻页时,手指按下去的时候会触发这个方法,state值为1,手指抬起时,如果发生了滑动(即使很小),这个值会变为2,
            // 然后最后变为0 。总共执行这个方法三次。一种特殊情况是手指按下去以后一点滑动也没有发生,这个时候只会调用这个方法两次,state值分别是1,0
            public void onPageScrollStateChanged(int state) {

            }
        });

        //设置监听器
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                for(int j=0;j<radioGroup.getChildCount();j++){
                    if(radioGroup.getChildAt(j).getId()==i){
                        viewPager.setCurrentItem(j);
                        return;
                    }
                }
            }
        });

    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android底部导航栏实现可以通过使用RadioGroup和Fragment结合使用实现。首先,在布局文件中添加一个RadioGroup,然后在其中添加多个RadioButton,每个RadioButton代表一个导航项。接着,使用Fragment来实现每个导航项对应的页面内容。在RadioGroup中设置监听器,当用户点击某个RadioButton时,切换到对应的Fragment页面。这样就可以实现一个简单的底部导航栏了。 ### 回答2: Android底部导航栏实现一般可以通过RadioGroup和Fragment结合使用来完成。首先,在XML布局文件中定义一个RadioGroup,并在其中添加多个RadioButton,每个RadioButton对应导航栏中的一个选项。 接下来,在Activity中,我们需要定义一个Fragment的容器,用于加载不同的Fragment页面。在RadioGroup的选择监听器中,根据所选中的RadioButton的id,切换对应的Fragment页面。 在切换Fragment页面时,可以使用FragmentManager和FragmentTransaction来实现。通过FragmentManager的beginTransaction()方法获取一个FragmentTransaction的实例,然后使用replace()方法将容器中的Fragment替换为选中的目标Fragment,最后通过commit()方法提交事务即可完成页面切换。 为了方便管理和切换Fragment,可以定义一个Fragment的集合,用于存放所有的Fragment实例,并在选择监听器中根据RadioButton的顺序获取对应的Fragment。 另外,为了保持Fragment的状态,在切换Fragment时可以使用hide()和show()方法而不是replace()来隐藏和显示Fragment,这样可以避免Fragment被重复实例化。 总结来说,通过RadioGroup和Fragment的结合使用,我们可以实现Android底部导航栏的功能。通过监听RadioGroup中RadioButton的选择事件,来切换不同的Fragment页面。这样可以实现底部导航栏的选项切换,同时保持Fragment的状态。 ### 回答3: Android底部导航栏实现可以通过使用RadioGroup和Fragment来实现。 首先,我们可以在布局文件中创建一个包含多个RadioButton的RadioGroup,这些RadioButton将作为底部导航栏的按钮。我们可以为每个RadioButton设置图标和文本,以表示不同的导航选项。通过设置RadioGroup的布局属性可以将其放置在屏幕的底部。 接下来,我们需要创建对应的Fragment,并在Activity中使用FragmentTransaction来进行Fragment的切换。在FragmentTransaction中,我们可以通过调用replace方法来替换Activity中的显示内容,将选中的RadioButton对应的Fragment显示出来。 当用户点击底部导航栏的RadioButton时,我们可以通过设置RadioGroup的OnCheckedChangeListener来监听选中项的变化。当选中项发生变化时,我们可以获取选中的RadioButton对应的Fragment,并使用FragmentTransaction来进行Fragment的切换,从而显示选中的Fragment。 此外,为了更好地控制底部导航栏的切换效果,我们还可以使用fragment的缓存机制以提高切换的效率,避免每次切换都重新创建Fragment对象。 总之,通过结合RadioGroup和Fragment的使用,我们可以方便地实现Android底部导航栏的功能,使用户可以方便地在不同的导航选项之间进行切换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值