资讯专栏INFORMATION COLUMN

【1-100】RadioGroup实现应用主界面

CntChen / 3005人阅读

摘要:代码很简单,如下,高速全览每个都需要实现来控制视图,当不可见的时候,需要隐藏相应的视图,不然会使界面重叠在一起。

首先,我们先来创建主界面的布局文件



    
    
        
        
            
            .......省略
            
        
    

可以看到,我们将最后一个先设置为选中状态,在Activity中再进行状态的切换

四个RadioButton的属性大多都是一样的,所以抽取到styles

还有drawableToptext相应的Seletor
select_tab_bus.xml
这里只列出了一个,其他三个只是图片不同就不列出来了


    
    
    

select_tab_text_color.xml


    
    
    

到这里我们的布局就准备好了,接下来开始编写Fragment与Activity的代码。

fragment代码很简单,如下,

public class MainExpresswayWatchFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
         Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_common, container, false);
        TextView tvContent = (TextView) view.findViewById(R.id.tv_content);
        tvContent.setText("高速全览");
        return view;
    }

    @Override
    public void setMenuVisibility(boolean menuVisible) {
        super.setMenuVisibility(menuVisible);
        // 每个Fragment都需要实现`setMenuVisibility`来控制视图,
        // 当Fragment不可见的时候,需要隐藏相应的视图,不然会使界面重叠在一起。
        if (this.getView() != null) {
            this.getView().setVisibility(menuVisible ? View.VISIBLE : View.GONE);
        }
    }
}

接下来是Activity的代码,关键代码都有注释,我就不多说了...

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
    private RadioGroup radioGroup;
    private FrameLayout fragmentContainer;

    // 是否第一次进入主界面
    private boolean isFirstEnter = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio_group_main);
        radioGroup = (RadioGroup) findViewById(R.id.group_tab);
        fragmentContainer = (FrameLayout) findViewById(R.id.fragment_container);

        radioGroup.setOnCheckedChangeListener(this);
    }

    @Override
    protected void onStart() {
        super.onStart();
        if (isFirstEnter) {
            isFirstEnter = false;
            // 准备显示界面的时候切换第一个RadioButton为选中状态
            radioGroup.check(R.id.rb_watch);
        }
    }

    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {
        int index = 0;
        switch (i) {
            case R.id.rb_watch:
                index = 0;
                break;
            case R.id.rb_bus_danger:
                index = 1;
                break;
            case R.id.rb_car:
                index = 2;
                break;
            case R.id.rb_event:
                index = 3;
                break;
        }
        // 从FragmentManager中查找Fragment,找不到就使用getItem获取
        Fragment fragment = (Fragment) fragments.instantiateItem(fragmentContainer, index);
        // 设置显示第一个Fragment
        fragments.setPrimaryItem(fragmentContainer, 0, fragment);
        // 提交事务
        fragments.finishUpdate(fragmentContainer);
    }

    // 使用FragmentStatePagerAdapter管理Fragment
    FragmentStatePagerAdapter fragments = new FragmentStatePagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int position) {
            Fragment fragment = null;
            switch (position) {
                case 0:
                    fragment = new MainExpresswayWatchFragment();
                    break;
                case 1:
                    fragment = new MainBusDangerFragment();
                    break;
                case 2:
                    fragment = new MainCarManageFragment();
                    break;
                case 3:
                    fragment = new MainEventDangerFragment();
                    break;
            }
            return fragment;
        }

        @Override
        public int getCount() {
            return 4;
        }
    };
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/13208.html

相关文章

  • 关于(TabHost),(Button配合Fragment),(Menu)这三种常见的切换界面手法分

    摘要:那常用的手法有哪些呢我总结一下大致分为三种,配合,。第二种方式,不继承,在布局文件中定义即可,但是的必须是,的必须是。如果按钮很多,却又不想显示在界面上的,那的手法就是不二的首选。 前言 作为一个读者变成一个写技术文章的作者,我决定坚持还是写一些简单实用的文章(毕竟理论太高深,也许看的人很蛋疼。。。。我也相信如果有兴趣深入研究,必然会自己找百度的),好了言归真转。 主题内容 在我们的A...

    caspar 评论0 收藏0
  • Android底部导航栏实现(二)之RadioGroup

    摘要:布局这里的使用了状态选择器去除默认带的圆点代码初始化的代码就不记录了,都是一些实现过程无非就是对进行监听一下设置状态状态的设置这里需要注意的是,我写在里面并没有生效。 这里简单记录一下Android底部导航栏通过RadioGroup+Fragment的实现。 showImg(http://img.blog.csdn.net/20161205133818166); 布局: ...

    msup 评论0 收藏0
  • 符合ARIA的radiogroup

    摘要:省略,是核心,以下为部分核心代码上面为和添加上为监听器函数这个属性不用初始化,可以在焦点改变时修改 HTML Name: Drink Options Water ...

    Miracle 评论0 收藏0
  • 符合ARIA的radiogroup

    摘要:省略,是核心,以下为部分核心代码上面为和添加上为监听器函数这个属性不用初始化,可以在焦点改变时修改 HTML Name: Drink Options Water ...

    yeooo 评论0 收藏0
  • 符合ARIA的radiogroup

    摘要:省略,是核心,以下为部分核心代码上面为和添加上为监听器函数这个属性不用初始化,可以在焦点改变时修改 HTML Name: Drink Options Water ...

    zhouzhou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<