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