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();   }
}
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>


BEAN:
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
原创粉丝点击