androidのXlist框架上拉下拉刷新案例 (不含缓存的)

1. 今天看了项目中使用XListView, 方便以后使用,做个笔记记录。

案例源码可以加扣扣群:191974931 ,方便你的学习。

点击查看更多,即可刷新操作。

案例中使用listview 为

<me.maxwin.view.XListView        android:id="@+id/xListView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:cacheColorHint="#00000000"        android:dividerHeight="1px" ></me.maxwin.view.XListView>
首先要导入几个跟XlistView 相关的java代码。

上拉时候注意设置分页page =0. 再去查询。

下拉的时候page要实现page++, 进行分页查询。

这里数据是从服务器上获取的,详细代码如下:

public class MainActivity3 extends Activity implements IXListViewListener {static final int MENU_MANUAL_REFRESH = 0;static final int MENU_DISABLE_SCROLL = 1;static final int MENU_SET_MODE = 2;static final int MENU_DEMO = 3;// private List<Yilin> mListItems;private LinkedList<Comment> mListItems;private PullToRefreshListView mPullRefreshListView;private AIContentAdapter mAdapter;private static final int LOADING = 1;private static final int LOADING_COMPLETED = 2;private static final int LOADING_FAILED = 3;private static final int NORMAL = 4;private XListView mListView;public static final int FRIST_GET_DATE = 111;public static final int REFRESH_GET_DATE = 112;public static final int LOADMORE_GET_DATE = 113;private static int page = 0;private TextView textview;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 0) {geneItems((Integer)msg.obj);}}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ptr_list3);textview=(TextView)findViewById(R.id.textview);mListItems = new LinkedList<Comment>();mListView = (XListView) findViewById(R.id.xListView);mListView.setPullLoadEnable(true);loaddata();mAdapter = new AIContentAdapter(MainActivity3.this, mListItems);mListView.setAdapter(mAdapter);mListView.setXListViewListener(MainActivity3.this);}private void loaddata() {new GetDataTask().execute(FRIST_GET_DATE);}private class GetDataTask extendsAsyncTask<Integer, Void, LinkedList<Comment>> {@Overrideprotected LinkedList<Comment> doInBackground(Integer... params) {// 处理完成后给handler发送消息Message msg = new Message();msg.what = 0;msg.obj=params[0];handler.sendMessage(msg);return mListItems;}@Overrideprotected void onPostExecute(LinkedList<Comment> result) {mAdapter.notifyDataSetChanged();super.onPostExecute(result);}}// 加载,从网络端获取数据public LinkedList<Comment> fetchData(final int Action) {if(!NetworkUtils.isNetworkAvailable(MainActivity3.this)){     mListView.setVisibility(View.GONE);     textview.setVisibility(View.VISIBLE);     return null;}// setState(LOADING);Log.e("blueberry", "fetchData begin page=" + page);BmobQuery<Comment> query = new BmobQuery<Comment>();// 根据createdAt字段降序显示数据query.order("-createdAt");// 限制最多10条显示一页query.setLimit(10);// 用于控制查询显示次数,去除会刷新重复显示个数。query.setSkip(10 * (page++));query.findObjects(MainActivity3.this, new FindListener<Comment>() {@Overridepublic void onSuccess(List<Comment> list) {Log.i("blueberry", "查询成功 success.list个数=" + list.size());if (list.size() != 0 && list.get(list.size() - 1) != null) {if (Action == REFRESH_GET_DATE) {Log.i("blueberry","上刷新ListItems个数=" + mListItems.size());mListItems.clear();Log.i("blueberry","上刷新清除后mListItems个数=" + mListItems.size());}// 将网络段获取的数据list集合,加入创建的list对象中Log.i("blueberry", "添加listview个数前=" + mListItems.size());mListItems.addAll(list);Log.i("blueberry", "添加listview个数后=" + mListItems.size());// setState(LOADING_COMPLETED);mAdapter.notifyDataSetChanged();} else {Log.i("blueberry", "当前查询list数目为0   page=" + page);page--;// setState(LOADING_FAILED);}}@Overridepublic void onError(int arg0, String arg1) {page--;// setState(LOADING_FAILED);}});return mListItems;}// 设置获取直当前状态public void setState(int state) {switch (state) {case LOADING:if (mListItems.size() == 0) {mListView.setVisibility(View.GONE);}break;case LOADING_COMPLETED:mPullRefreshListView.setVisibility(View.VISIBLE);break;case LOADING_FAILED:if (mListItems.size() == 0) {mPullRefreshListView.setVisibility(View.VISIBLE);}break;case NORMAL:break;default:break;}}class AIContentAdapter extends BaseAdapter {public static final String TAG = "AIContentAdapter";private LinkedList<Comment> dataList;public AIContentAdapter(Context context, LinkedList<Comment> list) {super();Log.i("blueberry", "AIContentAdapter 加载");dataList = list;}@Overridepublic int getCount() {return dataList.size();}@Overridepublic Object getItem(int arg0) {return arg0;}@Overridepublic long getItemId(int arg1) {return arg1;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final ViewHolder viewHolder;if (convertView == null) {viewHolder = new ViewHolder();convertView = LayoutInflater.from(MainActivity3.this).inflate(R.layout.yilin_list_item, null);viewHolder.item_title = (TextView) convertView.findViewById(R.id.tv_article_title);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}System.out.println("blueberry_datalist.size=" + dataList.size());final Comment entity = dataList.get(position);// 显示单个titleviewHolder.item_title.setText((position + 1) + "  "+ entity.getCommentContent());return convertView;}}public class ViewHolder {public TextView item_title;}@Overridepublic void onRefresh() {new GetDataTask().execute(REFRESH_GET_DATE);}@Overridepublic void onLoadMore() {new GetDataTask().execute(LOADMORE_GET_DATE);}@SuppressLint("SimpleDateFormat")private void onLoad() {mListView.stopRefresh();mListView.stopLoadMore();SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日   HH:mm:ss");Date curDate = new Date(System.currentTimeMillis());// 获取当前时间String str = formatter.format(curDate);mListView.setRefreshTime(str);}private void geneItems(final int ACTION) {if (ACTION == FRIST_GET_DATE) {// 第一次加载fetchData(ACTION);mListView.setAdapter(mAdapter);} else if (ACTION == REFRESH_GET_DATE) {// 刷新数据page = 0;mListItems = fetchData(ACTION);mAdapter.notifyDataSetChanged();onLoad();} else if (ACTION == LOADMORE_GET_DATE) {// 加载更多mListItems = fetchData(ACTION);mAdapter.notifyDataSetChanged();onLoad();}}@Overrideprotected void onDestroy() {super.onDestroy();}}



更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android(安卓)Gson使用入门及GsonFormat插件的使用
  5. Android初学笔记——五:数据存储
  6. Android(安卓)---Application 开发中共享全局数据
  7. Android实现语音数据实时采集、播放
  8. 传智播客—Android(三) 数据存储之二 SharedPreferences
  9. android开发系列之数据存储

随机推荐

  1. Android_布局属性大全
  2. android发送restful风格的http请求
  3. Android应用程序键盘(Keyboard)消息处理机
  4. 阅读《Android 从入门到精通》(31)——Inte
  5. FregServer进程,获取ServiceManager代理对
  6. Android Studio查看错误信息
  7. 百度地图android开发资料
  8. Android 通过按键旋转屏幕
  9. 2011.07.19——— android intent 传递li
  10. 高德地图自定义点聚合样式Android