Android基础:ListView + ViewPager ( 四 )
来源:互联网 发布:ubuntu root密码 编辑:程序博客网 时间:2024/05/19 16:06
引用框架PullToRefresh,把ViewPager+PullToRefreshListView放在线性布局中
1 效果图:
2 布局:MainActivity.java
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="160dp" /> <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/ptf_listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#00000000" android:divider="#19000000" android:dividerHeight="4dp" android:fadingEdge="none" android:fastScrollEnabled="false" android:footerDividersEnabled="false" android:headerDividersEnabled="false" android:smoothScrollbar="true" /></LinearLayout>
3 代码:MainActivity.java
package com.cqc.listview_viewpager05;import java.util.ArrayList;import java.util.List;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode;import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;import com.handmark.pulltorefresh.library.PullToRefreshListView;import android.os.Bundle;import android.os.SystemClock;import android.app.Activity;import android.content.Context;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;/** *布局:linearLayout(竖直排列) viewpager + PullToRefreshListView *BUG:下拉刷新的时候viewpager不会跟着下拉,刷新的布标在viewpager下面 * @author cui * */public class MainActivity extends Activity { private ViewPager viewpager; private PullToRefreshListView ptf_listview; private List<ImageView> imageList = new ArrayList<ImageView>(); private List<String> lvList = new ArrayList<String>(); private Context context = MainActivity.this; private ListView listView; private MyLvAdapter lvAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViewPagerData(); initListViewData(); initViewPager(); initListView(); } // ListView---------------------------------------------- private void initListView() { ptf_listview = (PullToRefreshListView) findViewById(R.id.ptf_listview); ptf_listview.setMode(Mode.BOTH); ptf_listview.setOnRefreshListener(new OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { switch (refreshView.getCurrentMode()) {// switch()内不提示 case PULL_FROM_START: downData();// 下拉刷新数据 break; case PULL_FROM_END: upData();// 上拉加载数据 break; default: break; } // 或者: // if (refreshView.getCurrentMode() == Mode.PULL_FROM_START) { // downData();// 下拉刷新数据 // } else { // upData();// 上拉加载数据 // } } }); listView = ptf_listview.getRefreshableView(); lvAdapter = new MyLvAdapter(); listView.setAdapter(lvAdapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "ListView--" + position, Toast.LENGTH_SHORT).show(); } }); } // 下拉刷新数据 protected void downData() { new Thread() { public void run() { SystemClock.sleep(1000); // 下拉刷新也可以不用加载数据,直接网络请求数据再展示 for (int i = 0; i < 3; i++) { lvList.add(0, "下拉刷新数据---" + i);// } runOnUiThread(new Runnable() { public void run() { lvAdapter.notifyDataSetChanged(); ptf_listview.onRefreshComplete(); } }); }; }.start(); } // 上拉加载数据 protected void upData() { new Thread() { public void run() { SystemClock.sleep(1000); for (int i = 0; i < 3; i++) { lvList.add("上拉加载数据" + i); } runOnUiThread(new Runnable() { public void run() { lvAdapter.notifyDataSetChanged(); ptf_listview.onRefreshComplete(); } }); }; }.start(); } private void initListViewData() { lvList.clear(); for (int i = 0; i < 10; i++) { lvList.add("item--" + i); } } class MyLvAdapter extends BaseAdapter { @Override public int getCount() { return lvList.size(); } @Override public Object getItem(int position) { return lvList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView tv = new TextView(MainActivity.this); tv.setText(lvList.get(position)); tv.setTextSize(30); return tv; } } // viewpager------------------------------------- private void initViewPagerData() { imageList.clear(); ImageView iv1 = new ImageView(this); iv1.setBackgroundResource(R.drawable.a); ImageView iv2 = new ImageView(this); iv2.setBackgroundResource(R.drawable.b); ImageView iv3 = new ImageView(this); iv3.setBackgroundResource(R.drawable.c); ImageView iv4 = new ImageView(this); iv4.setBackgroundResource(R.drawable.d); imageList.add(iv1); imageList.add(iv2); imageList.add(iv3); imageList.add(iv4); } private void initViewPager() { // viewpager = (MyViewPager) findViewById(R.id.viewpager); viewpager = (ViewPager) findViewById(R.id.viewpager); MyPagerAdapter adapter = new MyPagerAdapter(); viewpager.setAdapter(adapter); viewpager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { Toast.makeText(MainActivity.this, "viewpager--" + position, Toast.LENGTH_SHORT).show(); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); } class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return imageList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(imageList.get(position)); return imageList.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }}
4 缺点:
1 下拉的时候viewpager不动,刷新的头布局在viewpager和listview之间。
2 所以,我们只可以把viewpager作为listview的头布局来使用:listView.addHeaderView(viewpager)。
3 见下一篇:Android基础:ListView + ViewPager ( 五 )
0 0
- Android基础:ListView + ViewPager ( 四 )
- Android基础:ListView + ViewPager ( 一 )
- Android基础:ListView + ViewPager ( 二 )
- Android基础:ListView + ViewPager ( 三 )
- Android基础:ListView + ViewPager ( 五 )
- Android基础:ListView和ViewPager的Adaper
- Android 自定义View基础(四)--ListView
- android 基础 ---> ViewPager
- android listview viewpager 异步加载图片 headerview
- android 滑动冲突 ScrollView Viewpager listview 等
- android 横向ListView Viewpager Gridview等组件
- Android listview viewpager解决冲突 滑动
- Android listview viewpager解决冲突 滑动
- Android之ListView头部添加ViewPager
- android(9) ListView + ScrollView + ViewPager布局
- Android:SlidingMenu+ListView+ViewPager 的滑动冲突
- Android listview viewpager解决冲突 滑动
- Android ScrollView+ViewPager+ListView一起使用
- dismissViewControllerAnimated后,completion传值给上一个父视图方法
- Python函数式实现单例特性
- AVL树-C实现
- 博客刚刚开通,还没有原创文章可以分享的。
- eclipse 安装反编译软件jadclipse
- Android基础:ListView + ViewPager ( 四 )
- Scene Kit上手指南
- longest common prefix
- linux中关于原子操作
- Android实现仿微信朋友圈发布动态(拍照、图库选择、照片压缩、显示、保存、缩略图、点击缩略图删除对应文件等)附源码
- Android基础:ListView + ViewPager ( 五 )
- poj-2377-Bad Cowtractors【并查集】
- VIM配置记录
- 最小生成树-Prim算法和Kruskal算法