XListView的下拉刷新,上拉加载

XListView的下拉刷新,上拉加载     

MainActivity类

public class MainActivity extends Activity {
    //全局变量
    private List<NewsListData> list = new ArrayList<NewsListData>();
    XListView xlv;
    MyXListViewAdapter adapter;
    int path = 1;
    boolean flag=true;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        xlv=(XListView) findViewById(R.id.xlv);
        //调用异步加载数据的方法
        initData();
        //创建适配器
        adapter=new MyXListViewAdapter();
        //设置适配器
        xlv.setAdapter(adapter);
        //设置下拉刷新状态
        xlv.setPullRefreshEnable(true);
        //设置上拉加载状态
        xlv.setPullLoadEnable(true);
        //设置下拉刷新的时间
        xlv.setRefreshTime("2017-10-18");
        //XListView的点击
        xlv.setXListViewListener(new IXListViewListener() {
            
            @Override
            public void onRefresh() {
                 //如果flag为false就下拉刷新数据
                flag=false;
                //刷新数据为最初数据
                path=1;
                //调用异步加载数据的方法
                initData();
                //吐司
                Toast.makeText(MainActivity.this, "path目前等于:"+path, 0).show();
                 //停止刷新
                xlv.stopRefresh();
            }
            
            @Override
            public void onLoadMore() {
                // 如果flag=true;就上拉加载数据
                flag=true;
                path++;
                //调用异步加载数据的方法
                initData();
                //吐司
                Toast.makeText(MainActivity.this, "path目前等于:"+path, 0).show();
                //停止加载
                xlv.stopLoadMore();
            }
        });
    }
    //创建适配器
    public class MyXListViewAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            if (list != null) {
                return list.size();
            }
            return 0;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // 优化
            ViewHolder holder;
            if (convertView == null) {
                convertView = View.inflate(MainActivity.this,
                        R.layout.list_item, null);
                holder = new ViewHolder();
                holder.tv_ctime = (TextView) convertView
                        .findViewById(R.id.tv_ctime);
                holder.tv_title = (TextView) convertView
                        .findViewById(R.id.tv_title);
                holder.tv_description = (TextView) convertView
                        .findViewById(R.id.tv_description);
                holder.tv_url = (TextView) convertView
                        .findViewById(R.id.tv_url);
                holder.iv_picUrl = (ImageView) convertView
                        .findViewById(R.id.iv_picUrl);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.tv_ctime.setText(list.get(position).getCtime());
            holder.tv_title.setText(list.get(position).getTitle());
            holder.tv_description.setText(list.get(position).getDescription());
            holder.tv_url.setText(list.get(position).getUrl());
            ImageLoader.getInstance().displayImage(list.get(position).getPicUrl(), holder.iv_picUrl);
            return convertView;
        }

    }
      //优化帮助类
    private static class ViewHolder {
        TextView tv_ctime, tv_title, tv_description, tv_url;
        ImageView iv_picUrl;
    }
  //异步加载数据的方法
    public void initData() {
        new AsyncTask<String, String, String>() {

            @Override
            protected String doInBackground(String... params) {
                // 调用 方法
                getData();
                return null;
            }

            @Override
            protected void onPostExecute(String result) {
                // 刷新适配器
                adapter.notifyDataSetChanged();
            
                super.onPostExecute(result);
            }
        }.execute();
    }
    //获取网络数据的方法
    public void getData() {
        try {
            URL url = new URL(
                    "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="
                            + path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            int code = conn.getResponseCode();
            if (code == 200) {
                //Gson解析
                Gson gson = new Gson();
                JsonData json = gson.fromJson(
                        new InputStreamReader(conn.getInputStream()),
                        JsonData.class);
                //如果fls为true就把json.getNewslist()拼接进去进行加载数据
                //else就走list=json.getNewslist();
                if (flag) {
                    //list.addAll拼接
                    list.addAll(json.getNewslist());
                } else {
                    list=json.getNewslist();
                }
                Log.i("+++++++++++++++++++++++", list+"");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

Layout布局XListView的下拉刷新,上拉加载


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:orientation="horizontal"
        >
        <TextView
        android:id="@+id/tv_ctime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
        <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
        <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
        <TextView
        android:id="@+id/tv_url"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    </LinearLayout>
    <ImageView
        android:id="@+id/iv_picUrl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>