要使用ViewPager首先要导入包android-support-v4.jar
1、布局文件
main.xml 主界面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/test_viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
viewpager中lsitview的布局也可以是GridView
viewpager_listview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ListView
android:id="@+id/viewpage_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
listview中每个数据条目的布局
listview_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/viewpage_test_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher" >
</ImageView>
<TextView
android:id="@+id/viewpage_test_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="test"
android:textSize="30dp" >
</TextView>
</LinearLayout>
2、需要两个Adapter,viewpager的adapter和lsitview的adapter
public class MyPagerAdapter extends PagerAdapter
{
private static final String TAG = "MyPagerAdapter";
private List<View> mViewPages;
public MyPagerAdapter(List<View> viewPages) {
mViewPages = viewPages;
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return mViewPages.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1)
{
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public void destroyItem(View v, int position, Object object)
{
// TODO Auto-generated method stub
((ViewPager) v).removeView(mViewPages.get(position));
}
@Override
public void finishUpdate(View container)
{
// TODO Auto-generated method stub
}
@Override
public int getItemPosition(Object object)
{
// TODO Auto-generated method stub
return super.getItemPosition(object);
}
@Override
public Object instantiateItem(View v, int position)
{
// TODO Auto-generated method stub
((ViewPager) v).addView(mViewPages.get(position));
return mViewPages.get(position);
}
@Override
public void restoreState(Parcelable state, ClassLoader loader)
{
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState()
{
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View container)
{
// TODO Auto-generated method stub
}
}
public class MyListAdapter extends BaseAdapter
{
private LayoutInflater mInflater;
private List<String> mList;
private Context mContext;
public MyListAdapter(Context context, List<String> list) {
mContext = context;
mInflater = LayoutInflater.from(mContext);
mList = list;
}
@Override
public int getCount()
{
return mList.size();
}
@Override
public Object getItem(int position)
{
return mList.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listview_item, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.viewpage_test_icon);
holder.text = (TextView) convertView.findViewById(R.id.viewpage_test_text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();// 取出ViewHolder对象
}
holder.text.setText(mList.get(position));
return convertView;
}
public final class ViewHolder
{
public ImageView icon;
public TextView text;
}
}
3、操作类
public class ViewPagerPresenter
{
private static final String TAG = "ViewPagerPresenter";
private static final int PAGE_SIZE = 5; // 每页显示的数据个数
private static final int TEST_LIST_SIZE = 43; // 数据总长度
private static int sTotalPages = 1;
private int mCurrentPage;
private List<MyListAdapter> mAdapters;
private List<List<String>> mPageList;
private List<ListView> mListViews;
private List<View> mViewPages;
private ViewPagerTestActivity mView;
public ViewPagerPresenter(ViewPagerTestActivity view) {
mView = view;
mPageList = new ArrayList<List<String>>();
mListViews = new ArrayList<ListView>();
mAdapters = new ArrayList<MyListAdapter>();
mViewPages = new ArrayList<View>();
initPages(getTestList());
initViewAndAdapter();
}
/**
* 将数据分页
* @param list
*/
public void initPages(List<String> list)
{
if (list.size() % PAGE_SIZE == 0) {
sTotalPages = list.size() / PAGE_SIZE;
} else {
sTotalPages = list.size() / PAGE_SIZE + 1;
}
mCurrentPage = 0;
List<String> l = new ArrayList<String>();
for (int i = 0; i < list.size(); ++i) {
l.add(list.get(i));
if ((i + 1) % PAGE_SIZE == 0) {
mPageList.add(l);
l = new ArrayList<String>();
}
}
if (l.size() > 0) {
mPageList.add(l);
}
}
/**
* 模拟数据
* @return
*/
public List<String> getTestList()
{
List<String> strs = new ArrayList<String>();
for (int i = 0; i < TEST_LIST_SIZE; ++i) {
String s = "viewpager test 第 " + i + "个";
strs.add(s);
}
return strs;
}
private void initViewAndAdapter()
{
LayoutInflater inflater = mView.getLayoutInflater();
for (int i = 0; i < sTotalPages; ++i) {
View v = inflater.inflate(R.layout.viewpager_listview, null);
ListView lv = (ListView) v.findViewById(R.id.viewpage_list);
mListViews.add(lv);
MyListAdapter adapter = new MyListAdapter(mView, mPageList.get(i));
mAdapters.add(adapter);
lv.setAdapter(adapter);
mViewPages.add(v);
}
}
public List<View> getPageViews()
{
return mViewPages;
}
}
4、TestActivity
public class ViewPagerTestActivity extends Activity
{
private static final String TAG = "ViewPagerTestActivity";
private ViewPager mViewPager;
private PagerAdapter mPageAdapter;
private ViewPagerPresenter mPresenter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init()
{
mViewPager = (ViewPager) findViewById(R.id.test_viewpager);
mPresenter = new ViewPagerPresenter(this);
mPageAdapter = new MyPagerAdapter(mPresenter.getPageViews());
mViewPager.setAdapter(mPageAdapter);
}
}
5、运行界面如下: