Android学习 (二十三) 自定义ViewPager的适配器
2016-12-08 01:23
465 查看
很多时候ViewPager都是和fragment联合起来使用的,但是有时候也需要定义自己的适配器完成一些其他的需求。
下面就来记录一下自己自定义ViewPager适配器的过程。
其实自定义ViewPager适配器和ListView过程基本都差不多,如图,标号基本就是一个实现的顺序。
1.在activity_main.xml文件中加入ViewPager控件:
2.新建一个Person.java类。用来定义一些自定义的变量。
3.创建一个main_activity_item.xml,作为子项布局。
我只写了两个控件,因为我Person类里面也只定义了两个变量。
4.接下来是很重要的一步,也是我思考时间比较久的一步。自定义适配器。其实这一步还是比较简单,重载四个函数而已。而且基本上适配器里面,如果没有其他需求的话,都是重载这四个函数。
这里我传了两个参数进来:
Activity activity:用来表示在当前的Activity中执行
List viewList:把View的实例化对象存放在了viewList里面
5.这个是实现适配器和ViewPager的链接使用。主要的需要想明白的地方是:
我还是先把MainActivity.java里面的全部代码贴上再详细解答:
这里,实现这两个的对应是通过这段代码来的:
但是你会发现,每次你实例化一个Person和View对象的时候,总是会有一些代码需要重复写,所以我又写了一个函数,来避免代码的重复:
以上,为所有内容,点击运行,效果如下:
一次滑动分别为,页面1、2、3、4:
下面就来记录一下自己自定义ViewPager适配器的过程。
其实自定义ViewPager适配器和ListView过程基本都差不多,如图,标号基本就是一个实现的顺序。
1.在activity_main.xml文件中加入ViewPager控件:
<android.support.v4.view.ViewPager android:id="@+id/view_pager_second_activity" android:layout_width="match_parent" android:layout_height="wrap_content">
2.新建一个Person.java类。用来定义一些自定义的变量。
ublic class Person{ private int age = 0; private String gender = "男"; public void setAge(int age){ this.age = age; } public int getAge(){ return age; } public void setGender(String gender){ this.gender = gender; } public String getGender(){ return gender; } }
3.创建一个main_activity_item.xml,作为子项布局。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text_age" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text_gender" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp"/> </LinearLayout>
我只写了两个控件,因为我Person类里面也只定义了两个变量。
4.接下来是很重要的一步,也是我思考时间比较久的一步。自定义适配器。其实这一步还是比较简单,重载四个函数而已。而且基本上适配器里面,如果没有其他需求的话,都是重载这四个函数。
这里我传了两个参数进来:
Activity activity:用来表示在当前的Activity中执行
List viewList:把View的实例化对象存放在了viewList里面
public class PersonSecondAdapter extends PagerAdapter{ private List<View>viewList; private Activity activity; //构造函数 public PersonSecondAdapter(Activity activity, List<View> viewList){ this.activity = activity; this.viewList = viewList; } @Override public boolean isViewFromObject(View arg0,Object object){//view是否来自对象 return arg0 == object; } @Override public void destroyItem(ViewGroup container, int itemPosition,Object object){//销毁当前页卡 Log.d("=====destroyItem",String.valueOf(itemPosition)); container.removeView(viewList.get(itemPosition));//viewList是存放view的数据结构 } @Override//获取当前页卡数量 public int getCount(){ if(viewList != null){ return viewList.size(); } return 0; } @Override//初始化Position位置的界面 public Object instantiateItem(ViewGroup container,int itemPosition){//实例化当前页卡 Log.d("=====instantiateItem",String.valueOf(itemPosition)); container.addView(viewList.get(itemPosition));//把我刚刚新建的view传进去 return viewList.get(itemPosition); } }
5.这个是实现适配器和ViewPager的链接使用。主要的需要想明白的地方是:
我还是先把MainActivity.java里面的全部代码贴上再详细解答:
public class SecondActivity extends AppCompatActivity { private List<View> viewList= new ArrayList<View>();//用来装适配器的资源 private ViewPager viewPager;//实例 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); initPerson();//初始化viewList PersonSecondAdapter myAdapter = new PersonSecondAdapter(SecondActivity.this,viewList); ViewPager myViewPager = (ViewPager)findViewById(R.id.view_pager_second_activity); myViewPager.setAdapter(myAdapter); } public void initPerson(){//给viewList添加数据 Person person1 = new Person(); View vi c710 ew1 = null; person1.setAge(100); person1.setGender("男"); viewList.add(setViewListData(view1,person1)); Person person2 = new Person(); View view2 = null; person2.setAge(19); person2.setGender("girl"); viewList.add(setViewListData(view2,person2)); Person person3 = new Person(); View view3 = null; person3.setAge(1865); person3.setGender("hhh"); viewList.add(setViewListData(view3,person3)); Person person4 = new Person(); View view4 = null; person4.setAge(88); person4.setGender("xixixi"); viewList.add(setViewListData(view4,person4)); } //实现把person里面的数据添加到viewList里面 public View setViewListData(View view,Person person){ view = LayoutInflater.from(SecondActivity.this).inflate(R.layout.second_activity_item,null);//把子项布局加载到view里面 TextView text1 = (TextView) view.findViewById(R.id.text_age); TextView text2 = (TextView) view.findViewById(R.id.text_gender); text1.setText(String.valueOf(person.getAge())); text2.setText(person.getGender()); return view; } }
这里,实现这两个的对应是通过这段代码来的:
Person person1 = new Person(); //然后初始化数据 person1.setAge(100); person1.setGender("男"); View view1 = LayoutInflater.from(SecondActivity.this).inflate(R.layout.second_activity_item,null);//把子项布局加载到view里面,注意这里有个参数null。 然后找到空间布局的id TextView text1 = (TextView) view.findViewById(R.id.text_age); TextView text2 = (TextView) view.findViewById(R.id.text_gender); //把数据添加到控件里面 text1.setText(String.valueOf(person.getAge()));//注意这里的类型转换 text2.setText(person.getGender()); ------------------------------------------------------------- //以上的代码已经完成了View和Person的对应。 -------------------------------------------------------------- //把View的实例化对象view1添加到viewList里面 viewList.add(view1);
但是你会发现,每次你实例化一个Person和View对象的时候,总是会有一些代码需要重复写,所以我又写了一个函数,来避免代码的重复:
//实现把person里面的数据添加到viewList里面 public View setViewListData(View view,Person person){ view = LayoutInflater.from(SecondActivity.this).inflate(R.layout.second_activity_item,null);//把子项布局加载到view里面 TextView text1 = (TextView) view.findViewById(R.id.text_age); TextView text2 = (TextView) view.findViewById(R.id.text_gender); text1.setText(String.valueOf(person.getAge())); text2.setText(person.getGender()); return view; }
以上,为所有内容,点击运行,效果如下:
一次滑动分别为,页面1、2、3、4:
相关文章推荐
- Android学习(十八)ViewPager适配器编写
- android 自定义轮播广告控件ViewPager——自定义控件学习(四)
- android ViewPager学习(二)创建自定义标题
- Android 实现横向标题栏滚动效果(HorizontalScrollView + GridView + Viewpager + 自定义适配器)
- Android学习之路--简单的ViewPager(二 自定义ViewPager)
- Android-UI布局---RecyclerView学习(一)在适配器中自定义长按和点击事件
- Apidemo学习 android 自定义View
- android学习_自定义View
- Android学习札记47:TextView显示Html类解析的网页和图片及自定义标签
- Android开发学习之使用ViewPager打造应用引导界面面
- Android 学习之--自定义ViewGroup
- 【Android开发学习】自定义View
- 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!
- 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!
- Android学习篇章62-ViewPager-滑动窗口-FragmentActivity
- Android开发学习之使用ViewPager+PagerTabStrip制作可滑动的Tab
- 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!
- 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!
- 【Android游戏开发二十三】自定义ListView【通用】适配器并实现监听控件!
- Android总结笔记01:自定义View学习(一)