將一個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、运行界面如下:
- 將一個listview中的數據用ViewPager實現橫屏滑動分頁顯示
- ViewPager + ListView
- viewpager中的ListView和fragment获取到设备后退键
- 学习笔记-touch事件分发:viewpager中的listview
- ListView嵌套ViewPager
- ListView嵌套ViewPager
- ViewPager+ListView+grideView
- Viewpager嵌套Listview
- ViewPager嵌入ListView
- 共同头部+ViewPager+ListView
- Viewpager中嵌套ListView
- viewpager+fragment+listview registerForContextMenu
- Abddoid ViewPager+Fragment+ListView
- ViewPager和ListView
- ListView头部添加ViewPager
- Viewpager加ListView解析
- Tablayout和Viewpager,listview
- 关于viewpager中嵌套的fragment中的listview的横向滑动的滑动冲突的问题。
- 【Linux】shell命令学习之find
- web随堂
- css 文本两端对齐
- 关于launcher改变tabs_container和tabhost位置引发的血案
- 最小化程序到右下角
- 將一個listview中的數據用ViewPager實現橫屏滑動分頁顯示
- Jedis 简单应用
- IOS 常用的小代码
- 雇员表,外键问题
- 菜鸟之旅——Java入门篇(三)简单语句
- string 相关
- Android:服务器访问WebService的使用
- 你知道javac的多少知识?
- javascript的confirm用法