將一個listview中的數據用ViewPager實現橫屏滑動分頁顯示

来源:互联网 发布:云海玉弓缘 知乎 编辑:程序博客网 时间:2024/04/28 00:51

要使用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、运行界面如下:

     


原创粉丝点击