ViewPager入门级用法

ViewPager入门级用法

本人的处男文章,写的不好的地方还请各位前辈多多批评指正

ViewPager是android扩展包v4包中的类:android.support.v4.view.PagerAdapter,可以让应用程序左右滑动,可以作为SplashActivity之后的导航界面,姑且叫它视图页吧。

1 本质上是一个容器,可以盛放其他的view,继承自ViewGroup
2 内容类似于ListView,需要一个PagerAdapter来提供内容适配

个人习惯,先把适配器写完再搞其他的



public class MyPagerAdapter extends PagerAdapter {
    List<View> lists;//一组view
    public MyPagerViewAdapter(List<View> lists,Context c)  
        {  
            this.lists = lists;  
            this.context=(Activity) c;
     }
    @Override
    public int getCount() {
        // 用于获取视图页的数量
        return lists.size();
    }
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // 判断传入的view和那个object是否等价
        return (arg0==arg1);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // view销毁时调用
        container.removeView(lists.get(position));
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // view显示时调用,返回要显示的View
        // 这里推荐使用防止数组越界的操作
        container.addView(lists.get(position%lists.size()));  
        return lists.get(position%lists.size());
    }

这里最少实现4方法,当然了想要更多功能,可以试试其他。有了适配器之后,把xml文件写好,再在代码中findviewbyid,之后用布局加载器,把准备好的view加载到list中,作为参数初始化Adapter


xml代码:

<android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>

java代码:

private void init() {

        LayoutInflater inflater = LayoutInflater.from(Setting4SafeActivity.this);
        list = new ArrayList<View>();
        list.add(inflater.inflate(R.layout.activity_setup1, null));
        list.add(inflater.inflate(R.layout.activity_setup2, null));
        list.add(inflater.inflate(R.layout.activity_setup3, null));
        list.add(inflater.inflate(R.layout.activity_setup4, null));
        adapter = new MyPagerViewAdapter(list, this);

        pager.setAdapter(adapter);

    }

基本用法就这么多,然后,作为小白的我干了件这样的事。。。。。

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // TODO Auto-generated method stub 用于实例化item
        switch (position) {
        case 1://手机卡绑定界面
            SettingView sv=(SettingView) viewList.get(1).findViewById(R.id.scv_setup2_bind);
            final CheckBox cb=(CheckBox) sv.findViewById(R.id.cb_iten4setting);
            //获取设置选项,回显到屏幕上
            String sim=sp.getString("sim", null);
            if (TextUtils.isEmpty(sim)) {
                cb.setChecked(false);
            }else {
                cb.setChecked(true);
            }
            //对钩选状态进行监听
            final String simNum=tm.getSimSerialNumber();//获取手机sim卡的串号
            cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    // TODO Auto-generated method stub
                    if (isChecked==false) {//取消绑定,清空串号信息
                        Editor editor=sp.edit();
                        editor.putString("sim", null);
                        editor.commit();
                        ToastUtils.show(context, "取消绑定");
                    }else {//开始绑定,记录串号
                        Editor editor=sp.edit();
                        editor.putString("sim", simNum);
                        editor.commit();
                        ToastUtils.show(context, "绑定完成");
                    }
                }
            });
            break;
            case 2:
                final EditText et_select=(EditText) viewList.get(2).findViewById(R.id.et_setup3_phone);
                et_select.setText(sp.getString("safeNum", null));
                Button btn_safe=(Button) viewList.get(2).findViewById(R.id.btn_setup3_select);
                btn_safe.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String safeNum=et_select.getText().toString().trim();
                        if (safeNum==null) {
                            ToastUtils.show(context, "号码不可以为空");
                            return;
                        }else {
                            Editor editor=sp.edit();
                            editor.putString("safeNum", safeNum);
                            editor.commit();
                            ToastUtils.show(context, "绑定完成 ");
                        }
                    }
                });
                break;
            case 3:
                Button btn_finish=(Button) viewList.get(3).findViewById(R.id.btn_down);
                CheckBox cb3=(CheckBox) viewList.get(3).findViewById(R.id.cb_iten4setting);
                cb3.setChecked(sp.getBoolean("protecting", false));
                cb3.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if (isChecked==true) {//选中
                            Editor editor=sp.edit();
                            editor.putBoolean("protecting", true);
                            editor.commit();
                        }else {
                            Editor editor=sp.edit();
                            editor.putBoolean("protecting", false);
                            editor.commit(); 
                        }
                    }
                });
                btn_finish.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        IntentUtils.IntentToActivityAndFinish(context, SafeActivity.class);
                    }
                });
                break;
        }

        container.addView(viewList.get(position%viewList.size()));  
        return viewList.get(position%viewList.size());
    }

额。。。。。。好像有点乱是么
我是想在导航页面时候就进行一些设置相关的操作,具体操作就忽略吧···于是直接在instantiateItem方法中来了一个Switch,针对每个视图页都进行了一个case。
大致效果是这样的

这里写图片描述

目前是可以用的·····但是不知道这样做合不合适,会不会在效率上有什么不好的效果。

求各位高人批评了,在下虚心求教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值