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

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

     


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值