xListView实现上、下拉刷新数据
来源:互联网 发布:东方财富mac版 编辑:程序博客网 时间:2024/06/13 10:48
MainActivity
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener { private static final String TAG = "MainActivity"; private XListView xLv; private int pageIndex = 1; private MyBaseAdapter adapter; //设置一个标识,判断用户是否是上拉还是下拉 private boolean isRefreash = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); xLv = (XListView) findViewById(R.id.xLv); //设置是否可以上拉加载更多 xLv.setPullLoadEnable(true); //设置是否可以下拉刷新 //xLv.setPullRefreshEnable(true); xLv.setRefreshTime("10:53:13"); xLv.setXListViewListener(this); try { getMenuInfo("http://apis.juhe.cn/cook/query.php?" + "key=a7a42220c5c1c5268be7ba25af764f6c&menu="+ URLEncoder.encode("秘制红烧肉","utf-8")+"&pn"+pageIndex+"&rn="+10); } catch (Exception e) { e.printStackTrace(); } } /** * 分页加载菜谱数据 */ private void getMenuInfo(String path){ new AsyncTask<String,Void,String>(){ @Override protected void onPostExecute(String s) { super.onPostExecute(s); //主线程执行 if(s == null){ return; } //解析 Gson gson = new Gson(); MenuInfo menuInfo = gson.fromJson(s, MenuInfo.class); //UI更改 if(adapter == null) { //如果是adapter第一次进来空 判定为第一次的默认加载 adapter = new MyBaseAdapter(MainActivity.this, menuInfo.getResult().getData()); }else { //加载更多 adapter.addMore(menuInfo.getResult().getData(),isRefreash); adapter.notifyDataSetChanged(); } xLv.setAdapter(adapter); } @Override protected String doInBackground(String... params) { //执行网络请求 try { String path = params[0]; URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); int code = connection.getResponseCode(); if(code == HttpURLConnection.HTTP_OK){ //获取数据 InputStream is = connection.getInputStream(); String json = StreamTools.readFromNetWork(is); return json; } } catch (Exception e) { e.printStackTrace(); } return null; } }.execute(path); } /** * 下拉刷新的时候会执行的方法 */ @Override public void onRefresh() { Log.d(TAG, "onRefresh: 下拉"); //请求第二页数据,需求:把最新的数据加载最前面 try { isRefreash = true; ++pageIndex;//更改请求第几页 getMenuInfo("http://apis.juhe.cn/cook/query.php?" + "key=a7a42220c5c1c5268be7ba25af764f6c&menu="+ URLEncoder.encode("秘制红烧肉","utf-8")+"&pn"+pageIndex+"&rn="+10); //停止刷新 , 让刷新的UI回弹 xLv.stopRefresh(true); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } /** * 上拉加载更多数据时所执行的方法 */ @Override public void onLoadMore() { Log.d(TAG, "onLoadMore: 上拉"); try { isRefreash = false; ++pageIndex;//更改请求第几页 getMenuInfo("http://apis.juhe.cn/cook/query.php?" + "key=a7a42220c5c1c5268be7ba25af764f6c&menu="+ URLEncoder.encode("秘制红烧肉","utf-8")+"&pn"+pageIndex+"&rn="+10); xLv.stopLoadMore(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }}
listView优化类
public class MyBaseAdapter extends BaseAdapter { private Context context; //private MenuInfo menuInfo; private List<MenuInfo.ResultBean.DataBean> list; public MyBaseAdapter(Context context, List<MenuInfo.ResultBean.DataBean> list){ this.context = context; //this.menuInfo = menuInfo; this.list = list; } /** * 加载更多数据 */ public void addMore(List<MenuInfo.ResultBean.DataBean> lists,boolean isRefresh){ for (MenuInfo.ResultBean.DataBean data: lists) { //将最新的数据添加到适配所定义的集合中 if(isRefresh) { //isRefresh true 下拉的动作 要把数据添加到最前面 list.add(0, data); }else { //isRefresh false 上拉的动作 要把数据添加到最后面 list.add(data); } } } @Override public int getCount() { /* return menuInfo.getResult().getData() != null ? menuInfo.getResult().getData().size() : 0;*/ return list != null ? list.size() : 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if(convertView == null){ viewHolder = new ViewHolder(); convertView = convertView.inflate(context, R.layout.item,null); viewHolder.tvDesc = (TextView) convertView.findViewById(R.id.tvDes); convertView.setTag(viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag(); } //设置文本信息 viewHolder.tvDesc.setText(list.get(position).getTags()); return convertView; } //定义V static class ViewHolder{ TextView tvDesc; }}
1 0
- xListView实现上、下拉刷新数据
- XListView实现上拉刷新下拉加载
- xlistview实现上拉加载,下拉刷新
- XListView实现下拉刷新和上拉加载
- 通过XListView实现上拉加载下拉刷新
- Xlistview实现上拉刷新下拉加载及item可单选
- MainActivity中Xlistview实现下拉刷新和上拉加载
- XListView实现上拉加载下拉刷新,注意事项
- Xlistview下拉刷新,上拉刷新
- XlistView上拉刷新下拉加载
- xListView上拉刷新下拉加载
- xListView上拉加载下拉刷新
- XListView上拉加载,下拉刷新
- xlistview上拉加载下拉刷新
- XListView上拉加载下拉刷新
- XListView上拉刷新,下拉加载
- XListView的上拉及下拉刷新
- 上拉刷新--下拉加载XListView
- 商品展示 进行增删改查
- 优化枚举问题
- h5的相对定位、绝对定位、固定定位以及案例练习
- onsubmit="return check();"和onsubmit="check();"的区别
- 【辛普森积分*模板】2017河工大校赛 B地狱飞龙
- xListView实现上、下拉刷新数据
- 编译openssl for android
- Perhaps you are running on a JRE rather than a JDK?
- 并查集
- Android中EditText的inputType属性的详解
- 读程序
- ListView——适配器
- 数据库操作之商品展示
- SQL批量行转列已经多个字段拼接