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。
大致效果是这样的
目前是可以用的·····但是不知道这样做合不合适,会不会在效率上有什么不好的效果。