Android--项目练习(一)

用底部导航栏和fragment做一个页面效果

public class BaseActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener {

    private RadioGroup radioGroup;
    private List<BasePager> listPager;
    private int position;
    private FrameLayout fl_main;
    private MyFragment fragment;


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

        fl_main=(FrameLayout)findViewById(R.id.fl_main);
        radioGroup=(RadioGroup)findViewById(R.id.rg_main);


        initList();
        //设置点击监听
        radioGroup.setOnCheckedChangeListener(this);
        //设置默认选中第一个
        radioGroup.check(R.id.home_main);
    }


    //初始化fragment列表,将底部导航栏的页面添加进list里面
    private void initList() {
        listPager=new ArrayList<BasePager>();
        listPager.add(new HomePager(BaseActivity.this));//主页
        listPager.add(new FriendPager(BaseActivity.this));//朋友
        listPager.add(new CheckPager(BaseActivity.this));//查阅
        listPager.add(new ShowPager(BaseActivity.this));//商城

    }
    
    //设置点击监听
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        switch (checkedId){
            default://默认第0个
                position=0;
                break;
            case R.id.friend_main://朋友
                position=1;
                break;
            case R.id.check_main://查阅
                position=2;
                break;
            case R.id.show_main://商城
                position=3;
                break;
        }
        setFragment();
    }

	
	//设置fragment
    private void setFragment() {

        FragmentManager fm=getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();//开启事务


//        ft.replace(R.id.fl_main, new Fragment(){
//            @Nullable
//            @Override
//            public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//                BasePager basePager1=getBasePager();
//                if(basePager1!=null){
//                    return basePager1.rootView;
//                }
//                return null;
//            }
//        });


        BasePager basePager=getBasePager();
        //这里注意:千万不能写成上面注释那样,会报错,真机闪退
        fragment=new MyFragment(basePager);


        ft.replace(R.id.fl_main,fragment);
        ft.commit();
    }


    //返回响应的页面
    private BasePager getBasePager() {
        BasePager basePager=listPager.get(position);
        //用于初始化数据
        if(basePager!=null&&!basePager.isInitData){
            basePager.initData();
            basePager.isInitData=true;
        }
        return basePager;
    }
}

对应的布局文件:

   <FrameLayout
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:id="@+id/fl_main">

    FrameLayout>

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/rg_main"
        android:gravity="center">

        <RadioButton
            style="@style/BASE_DOWN"
            android:text="主页"
            android:id="@+id/home_main"
            android:drawableTop="@drawable/replace_home" />

        <RadioButton
            style="@style/BASE_DOWN"
            android:id="@+id/friend_main"
            android:drawableTop="@drawable/replace_friend"
            android:text="联系人" />

        <RadioButton
            style="@style/BASE_DOWN"
            android:id="@+id/check_main"
            android:drawableTop="@drawable/replace_button"
            android:text="查阅"/>

        <RadioButton
            style="@style/BASE_DOWN"
            android:id="@+id/show_main"
            android:drawableTop="@drawable/replace_show"
            android:text="商城" />

    RadioGroup>

样式在底部导航栏那篇文字,自己看。

每个fragment都继承一个基类,这样的话才可以添加一个列表里面,泛型写基类

//各个页面的基类(公共类)
public abstract class BasePager {

    public Context context;

    public View rootView;

    public boolean isInitData=false;

    public BasePager(Context context) {
        this.context = context;
        rootView=initView();
        isInitData=false;
    }

    //强制孩子实现该方法,实现特定效果
    public abstract View initView();


    //当孩子需要初始化数据的时候,重写该方法,用于请求数据,或显示数据
    public void initData(){

    }

}

页面的例子:

public class CheckPager extends BasePager {

    public CheckPager(Context context) {
        super(context);
    }

    private TextView textView;
    @Override
    public View initView() {
        View view=View.inflate(context,R.layout.friend_pager, null);

        return view;
    }

    @Override
    public void initData() {
        super.initData();
    }
}

MyFragment代码:

public class MyFragment extends Fragment {

    private BasePager basePager;

    public MyFragment(BasePager basePager) {
        this.basePager = basePager;    
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if(basePager!=null) {
            return basePager.rootView;
        }
        return null;
    }
}

你可能感兴趣的:(Android)