java radiogroup_android 菜单导航 (Fragment + RadioGroup)

网上有很多讲利用Fragment + RadioGroup,actionbar + viewPager和TabHost做菜单导航和切换的例子。对于第三种现在已经过时了。所以讲讲自己对第一个的理解和经验分享,不过在此也简单说说第二种。

1、actionbar + viewpager

对于这种方式,其实在利用eclipse创建Activity的时候就可以直接让eclipse来为我们做好这样的模板。不过要在创建工程时使要求的最小SDK大于或等于11(也可以在配置文件中修改)

17abf1c34bf6d1a7557fe6cd9f541b82.png

在Navigation type选择:Scrollable tabs + swipe 或者 Fixed Tabs + swipe。

这样就会自动生成所需的菜单导航的结构。这样可以将生成的现有代码和xml布局赋值到自己想要的Activity类中和xml布局文件中。

里面具体的细节又是怎么样的呢?查看生成的代码,用到的类也就ActionBar,ViewPager,FragmentPagerAdapter以及Fragment。

如果想要加载自己的xml布局文件,那么可以将导航菜单和布局文件用两个数组保存。在getItem(int position)中使用(position是从0开始的),并且给Fragment传递布局文件参数就可以了。如果希望每个布局文件中控件拥有像点击、滑动的功能等,自己可以获取相应的引用后进行操作。

2、RadioGroup + Fragmentpackage com.example.zzz;

import android.app.Activity;

import android.app.Fragment;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.RadioGroup;

import android.widget.RadioGroup.OnCheckedChangeListener;

//import android.support.v4.app.Fragment;

//import android.support.v4.app.FragmentActivity;

public class MainFragment2 extends Activity{

RadioGroup group;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

group = (RadioGroup) findViewById(R.id.group);

group.setOnCheckedChangeListener(new OnCheckedChangeListener() {

public void onCheckedChanged(RadioGroup group, int checkedId) {

click(checkedId);

}

});

}

void click(int id){

ItemFragment item = new ItemFragment();

Bundle bun = new Bundle();

switch (id) {

case R.id.one:

bun.putInt(ItemFragment.LAYOUT, R.layout.one);

break;

case R.id.two:

bun.putInt(ItemFragment.LAYOUT, R.layout.two);

break;

default :

return;

}

item.setArguments(bun);

getFragmentManager()

.beginTransaction()

.replace(R.id.content, item)

.commit();

/*getSupportFragmentManager()

.beginTransaction()

.replace(R.id.content, item)

.commit();*/

}

public static class ItemFragment extends Fragment {

static final String LAYOUT = "layout";

int layout = 0;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

layout = getArguments().getInt(LAYOUT);

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View v = null;

if(layout == 0){

v = new View(getActivity());

}else{

v = inflater.inflate(layout, container, false);

}

return v;

}

}

}

至于布局文件就很简单了:一个FrameLayout和一个RadioGroup放在LinearLayout中就ok了

而在代码中核心也就这么几句getFragmentManager()

.beginTransaction()

.replace(R.id.content, item)

.commit();

如果大家对于java swing/awt比较熟悉的话,那么一定知道CardLayout布局,FrameLayout和它是一样的。只能显示一个控件。在写java GUI的时候是放入JPanel,而在写android的时候就可以Fragment。

简单一句话,这样的菜单导航实际上就是在FragmentLayout容器中进行切换而已。不过对于SDK小于11的和大于等于11的代码只是小小不同。

722fb55478c4262aded925ac28a13b23.png,如果把android和HTML做相似比较的话,那么FrameLayout容器和iframe标签或者Frame布局是不是很像了。在网页中,让一个连接target到某个iframe或者frame中去,而在android中就是一个替换旧的那个。

如果在android中想将菜单放在自己想要的位置(可以是底部,顶部,两边)都可以。只要在xml布局文件中配置就行啦。如果想把菜单设计的漂亮一点,那就好好的对RadioButton美化下吧,多加点样式。

运行结果图:

8b00640fa3164f4ecb0c99333c7ba940.png

a54c210c08b9d731e9e4e8338e90e2b5.png

好了!!!!!!!!!!!

总结下:

不管学什么,我觉得学习新东西的时候,可以将它与自己已经掌握的只是进行类比,特别是设计思想,设计方式,显示型式等等。

另外,不要一味的追求某一种方式 或者 一味依赖别人显示的样式设计,而是要先自己思考,用自己已经学过的知识是否能实现一样的效果,这样才能真正掌握。

总之,能够实现一样的效果,一样的功能,且性能没有受到很大影响的情况下,这样的解决方法就是好方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值