android-Ultra-Pull-To-Refresh上拉下拉结合通用适配器的使用
来源:互联网 发布:贵州大数据产业规模 编辑:程序博客网 时间:2024/05/22 02:03
本篇结合了android-Ultra-Pull-To-Refresh上拉加载下拉刷新和万能适配器,自己使用了,总结一下,顺便能帮助到需要的人更好。
listView 的xml布局:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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"><in.srain.cube.views.ptr.PtrClassicFrameLayout android:id="@+id/load_more_list_view_ptr_frame" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- LoadMoreListViewContainer加载更多--> <in.srain.cube.views.loadmore.LoadMoreListViewContainer android:id="@+id/load_more_list_view_container" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/cube_mints_white"> <ListView android:id="@+id/homeworklist" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="5dip" android:cacheColorHint="#00000000" android:divider="@color/divider_color" android:dividerHeight="0.5dip" android:paddingLeft="@dimen/padding_left" android:paddingRight="@dimen/padding_left" /> </in.srain.cube.views.loadmore.LoadMoreListViewContainer></in.srain.cube.views.ptr.PtrClassicFrameLayout></RelativeLayout>
本文是在fragment写的,Fragment的代码:
public class NotStartHomeWorkFragment extends BaseFragment implements AdapterView.OnItemClickListener { private PtrFrameLayout mPtrFrameLayout;//下拉刷新 private LoadMoreListViewContainer mLoadMoreListViewContainer;//加载更多 private ListView mListView;//listview private List<NotStartHomeWork> mDatas;//填充的数据 NotStartHomeWorkAdapter mAdapter;//适配器 private int start = 0;//开始位置 private int count = 15;//每次加载15项 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_finished_home_work, container, false); initWidgets(view); return view; } private void initWidgets(View view) { mListView = (ListView) view.findViewById(R.id.homeworklist); // 为listview的创建一个headerview,注意,如果不加会影响到加载的footview的显示! View headerMarginView = new View(getContext()); headerMarginView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LocalDisplay.dp2px(20))); mListView.addHeaderView(headerMarginView); //设置适配器mAdapter mAdapter = new MyAdapter(getActivity(),getDate());//设置布局xml文件和填充数据 mListView.setAdapter(mAdapter);//绑定模拟的数据 //3.设置下拉刷新组件和事件监听 mPtrFrameLayout = (PtrFrameLayout) view.findViewById(R.id.load_more_list_view_ptr_frame); mPtrFrameLayout.setLoadingMinTime(1000); mPtrFrameLayout.setPtrHandler(new PtrHandler() { @Override public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) { // here check list view, not content. return PtrDefaultHandler.checkContentCanBePulledDown(frame, mListView, header);//mListView:listview } //实现下拉刷新的功能 @Override public void onRefreshBegin(PtrFrameLayout frame) { //实现下拉刷新的功能 Log.i("test", "-----onRefreshBegin-----"); mPtrFrameLayout.postDelayed(new Runnable() { @Override public void run() { mDatas.clear(); start = 0; //从0开始,加载15个项 mDatas.addAll(getMockData(start,count));//数据改变 mPtrFrameLayout.refreshComplete(); //第一个参数是:数据是否为空;第二个参数是:是否还有更多数据 mLoadMoreListViewContainer.loadMoreFinish(false, true); mAdapter.notifyDataSetChanged();//mAdapter通知 mDatas数据改变,让listview重新加载数据;listView 数据改变时自动更新listview列表: } }, 500); } }); //设置延时自动刷新数据 mPtrFrameLayout.postDelayed(new Runnable() { @Override public void run() { mPtrFrameLayout.autoRefresh(false); } }, 200); //4.加载更多的组件 mLoadMoreListViewContainer = (LoadMoreListViewContainer) view.findViewById(R.id.load_more_list_view_container); mLoadMoreListViewContainer.setAutoLoadMore(true);//设置是否自动加载更多 mLoadMoreListViewContainer.useDefaultHeader(); //5.添加加载更多的事件监听 mLoadMoreListViewContainer.setLoadMoreHandler(new LoadMoreHandler() { @Override public void onLoadMore(LoadMoreContainer loadMoreContainer) { //模拟加载更多的业务处理 mLoadMoreListViewContainer.postDelayed(new Runnable() { @Override public void run() { start++; mDatas.addAll(getMockData(start*10,count)); if (start * 10 > 30) { mLoadMoreListViewContainer.loadMoreFinish(true, false); //以下是加载失败的情节 int errorCode = 0; String errorMessage = "加载失败,点击加载更多"; // mLoadMoreListViewContainer.loadMoreError(errorCode, errorMessage); } else { mLoadMoreListViewContainer.loadMoreFinish(false, true); } mAdapter.notifyDataSetChanged(); } }, 1000); } }); initListener(); } private void initListener() { mListView.setOnItemClickListener(this);//listView OnItemClick事件 } //listview点击事件 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.v("Tag", "你点击了" + position); } private List<NotStartHomeWork> getMockData(int start, int count) { for(int i = start;i< start + count;i++){ NotStartHomeWork bean = new NotStartHomeWork("李四 ","你好","Hello","2016-6-6","暂停"); mDatas.add(bean); } return mDatas; } /*添加一个得到数据的方法,方便使用*/ private List<NotStartHomeWork> getDate(){ mDatas = new ArrayList<NotStartHomeWork>(); for(int i = 0;i<10;i++){ NotStartHomeWork bean = new NotStartHomeWork("张三 ","Hi","How are you","2016-7-15","暂停"); mDatas.add(bean); } return mDatas; }}上拉刷新,下拉加载结束;通用适配器的使用:public class MyAdapter extends CommAdapter<NotStartHomeWork>{ public MyAdapter (Context context, List<Bean> datas) { super(context, datas); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.get(mContext,convertView,parent, R.layout.item,position);//item布局 Bean bean = mDatas.get(position);//mDatas在NotStartHomeWorkFragment从NotStartHomeWorkAdapter构造方法传过来, ((TextView)holder.getView(R.id.student)).setText(bean.getName()); ((TextView)holder.getView(R.id.title)).setText(bean.getTitle()); ((TextView)holder.getView(R.id.describe)).setText(bean.getDescribe()); ((TextView)holder.getView(R.id.time)).setText(bean.getTime()); ((TextView)holder.getView(R.id.state)).setText(bean.getState()); return holder.getConvertView(); }}BEAN:item:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.7" android:id="@+id/student" android:layout_marginTop="@dimen/margin_top" android:text="小刚" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/title" android:text="Hello" android:layout_marginTop="@dimen/margin_top" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2.1" android:id="@+id/describe" android:text="在干嘛" android:layout_marginTop="@dimen/margin_top" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.1" android:id="@+id/time" android:text="2016/5/10" android:layout_marginTop="@dimen/margin_top" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1.1" android:id="@+id/state" android:text="暂停" android:layout_marginTop="@dimen/margin_top" /></LinearLayout>public class Bean { private String name; private String title; private String describe; private String time; private String state; public Bean() { super(); } public Bean(String name, String title, String describe, String time, String state) { this.name = name; this.title = title; this.describe = describe; this.time = time; this.state = state; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescribe() { return describe; } public void setDescribe(String describe) { this.describe = describe; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public String getState() { return state; } public void setState(String state) { this.state = state; }}CommAdapter,与ViewHolder复制过去
public abstract class CommAdapter<T> extends BaseAdapter { protected Context mContext; protected List<T>mDatas; protected LayoutInflater mInflater; public CommAdapter(Context context, List<T> datas) { this.mContext = context; mInflater= LayoutInflater.from(context); this.mDatas = datas; } @Override public int getCount() { // TODO Auto-generated method stub return mDatas.size(); } @Override public T getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public abstract View getView(int position, View convertView, ViewGroup parent) ;}
ViewHolder:public class ViewHolder {private SparseArray<View> mViews;//用来存储item中的控件private int mPosition;private View mConvertView;public ViewHolder(Context context, ViewGroup parent, int layoutId,int position){this.mPosition= position;this.mViews= new SparseArray<View>();mConvertView =LayoutInflater.from(context).inflate(layoutId, parent, false);mConvertView.setTag(this);}public View getConvertView() {return mConvertView;}public static ViewHolder get(Context context, View convertView,ViewGroup parent, int layoutId,int position){if(convertView==null){//当convertView布局为空时,new一个ViewHolderreturn new ViewHolder(context, parent, layoutId, position);}else{ViewHolder holder = (ViewHolder) convertView.getTag();//当convertView布局不为空时,获取convertView中的控件复用holder.mPosition = position;return holder;}}//通过viewId获取控件public <T extends View> T getView(int viewId) {View view = mViews.get(viewId);//根据id获取item中的控件if(view==null){//当没有此id控件的时候view = mConvertView.findViewById(viewId);//从mConvertView中获取id的控件mViews.put(viewId, view);}return (T)view;}//辅助方法,可写可不写public ViewHolder setText(int viewId,String text) {TextView tv = getView(viewId);tv.setText(text);return this;}public ViewHolder setImageResource(int viewId, int resId) {ImageView view = getView(viewId);view.setImageResource(resId);return this;}public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) {ImageView view = getView(viewId);view.setImageBitmap(bitmap);return this;}}
OK。参考:http://www.07net01.com/program/2016/02/1309061.html
0 0
- android-Ultra-Pull-To-Refresh上拉下拉结合通用适配器的使用
- 基于Android-Ultra-Pull-To-Refresh封装的轻量级上拉下拉刷新框架
- Ultra-Pull-To-Refresh上拉加载的使用
- (转)Ultra-Pull-To-Refresh上拉加载的使用
- 上拉下拉 pull-to-refresh
- 关于android-Ultra-Pull-To-Refresh的下拉刷新和上拉加载更多
- Ultra-pull-to-refresh ListView 下拉刷新 上拉加载的使用
- android-Ultra-Pull-To-Refresh 使用简介
- android-Ultra-Pull-To-Refresh使用教程
- 下拉刷新库android-Ultra-Pull-To-Refresh的使用
- android-Ultra-Pull-To-Refresh的一些使用
- 下拉刷新框架Android-Ultra-Pull-To-Refresh的使用
- Ultra-Pull-To-Refresh实现下拉刷新上拉加载
- [Android]Ultra-Pull-To-Refresh之listview下拉刷新、上拉加载的用例-已更新
- android-Ultra-Pull-To-Refresh
- Android-Ultra-Pull-To-Refresh
- android中下拉刷新的例子android-Ultra-Pull-To-Refresh 源码解析
- Android的pull-to-refresh如何只使用上拉加载
- oracle数据库性能优化 - 降低IO
- 解压和压缩
- java之TreeMap/TreeSet篇
- 不要和一种编程语言厮守终生:为工作正确选择
- 教你一步一步用OpenGL写游戏——前言
- android-Ultra-Pull-To-Refresh上拉下拉结合通用适配器的使用
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
- C# 判断设备是否在线
- MapReduce的map端join
- Qt学习之路(7): 创建一个对话框(上)
- Navicat Premium连接Oracle数据库报错
- Hbase1.1.3的相关使用心得
- Linux/Windows JDK8安装|JDK1.8安装和环境变量配置
- IOS 系统打电话事件的监听与状态获取