这里接着上篇继续写,上篇我们用listView设置header的方式实现了两者的组合,接下来我们用把viewpager设置为listview的第一个选项的方式来实现。
onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = getApplicationContext();
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.lv_main);
String[] viewPagerData = new String[]{"第一页", "第二页", "第三页", "第四页", "第五页"};
String[] listViewData = new String[15];
for (int i = 0; i < listViewData.length; i++) {
listViewData[i] = "item" + i;
}
/**这里把viewpager要用的数据一块传过去,大家可以根据自己的喜好来实现**/
listViewAdapter = new ListViewAdapter(context, listViewData, viewPagerData);
listView.setAdapter(listViewAdapter);
}
这里我们只需要给listview设置adapter就可以了,但是我们要在ListViewAdapter中设置viewPager的adapter,所以这里我把viewPager要用的数据一块传了过去。
接下来ListViewAdapter必须实现这两个方法:
/**
* @param position
* @return ListView item的类型
*/
@Override
public int getItemViewType(int position) {
return position > 0 ? 1 : 0;
}
/**
* @return ListView 中item的种类
*/
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
我们根据getItemViewType(position)的返回值来判断加载哪种布局
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
if (getItemViewType(position) == 0) {/**应该加载viewpager**/
if (view == null) {
viewHolder = new ViewHolder();
view = View.inflate(context, R.layout.listview_first_item, null);
viewHolder.viewPager = (ViewPager) view.findViewById(R.id.viewpager_main);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.viewPager.setAdapter(new ViewPagerAdapter(context, viewPagerData));
} else if (getItemViewType(position) == 1) {/**应该加载普通的listview Item**/
if (view == null) {
viewHolder = new ViewHolder();
view = View.inflate(context, R.layout.listview_item, null);
viewHolder.textView = (TextView) view.findViewById(R.id.tv_listview_item);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.textView.setText(listViewData[position]);
}
return view;
}
好了,基本过程就是这样了