android第三方框架 xlistview 的使用

来源:互联网 发布:白俄罗斯军力知乎 编辑:程序博客网 时间:2024/05/20 10:22
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" android:background="#f0f0f0">


    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />


    <com.example.guwie.yaoren.ui.view.XListView
        android:id="@+id/xListView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000">


    </com.example.guwie.yaoren.ui.view.XListView>




</LinearLayout>




为布局文件写对应的java文件






public class TaskList extends AppCompatActivity implements XListView.IXListViewListener {


    //创建xlistview对象
    private XListView mListView;


    //创建数据
    List<ItemBean> dataList = new ArrayList<>();
    private Object item;


    int page = 1;
    int maxpage = 0;


    //用来执行耗时操作
    private Handler mHandler;


    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tasklist);


        //指定布局中的xlistview控件
        mListView = (XListView) findViewById(R.id.xListView);
        mListView.setPullLoadEnable(true);
        mListView.setPullRefreshEnable(true);


        getTaskList(page);
        mListView.setAdapter(new MyAdapter(TaskList.this, dataList));


        mListView.setXListViewListener(this);


        mHandler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what){
                    case 0x001:
                        Toast.makeText(TaskList.this , "已无更多数据" , Toast.LENGTH_SHORT).show();
                        break;
                    case 0x002:
                        Toast.makeText(TaskList.this , "未找到数据" , Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        };
    }




    //获得数据后要执行onLoad()方法,否则刷新会一直进行停不下来


    private void onLoad() {


        mListView.stopRefresh();


        mListView.stopLoadMore();


        mListView.setRefreshTime("刚刚");


    }




    @Override
    public void onRefresh() {


        dataList.clear();
        page = 1;
        mHandler.post(new Runnable() {//执行耗时操作
            @Override
            public void run() {
                getTaskList(page);
                mListView.setAdapter(new MyAdapter(TaskList.this, dataList));
            }
        });
        onLoad();
        Log.i("------------------", "onRefresh");


    }


    @Override
    public void onLoadMore() {


        mHandler.post(new Runnable() {
            @Override
            public void run() {
                if(page < maxpage){


                    getTaskList(++page);
                    mListView.deferNotifyDataSetChanged();


                }else{


                    Message msg = new Message();
                    msg.what=0x001;
                    mHandler.sendMessage(msg);
                }
//                getTaskList(++page);
//                mListView.deferNotifyDataSetChanged();
                //mListView.setAdapter(new MyAdapter(TaskList.this, dataList));


            }
        });
        onLoad();
        Log.i("------------------", "onLoadMore");
    }


    /***
     *    获取list数据 volley 方法 post string数据 得到 json数据 服务端由php编写
     *  
     * */
    public void getTaskList(int pages) {


        Toast.makeText(TaskList.this , pages+"" , Toast.LENGTH_SHORT).show();
        RequestQueue mreuestQueut = Volley.newRequestQueue(this);


        final Gson gson = new Gson();


        JsonObjectRequest jsreq = new JsonObjectRequest(Request.Method.GET, TASK_LIST_DATE+"page="+pages, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject jsonObject) {


                        Message msg = new Message();


                        try {
                            int code = jsonObject.getInt("code");
                            if(code == 200){


                                int size = jsonObject.getJSONArray("data").length();
                                for(int i=0; i<size ; i++){


                                    JSONObject dataObject = jsonObject.getJSONArray("data").getJSONObject(i);
                                    String title = dataObject.getString("title");
                                    String price = dataObject.getString("fee");
                                    String explain = dataObject.getString("description");
                                    dataList.add(new ItemBean(title , explain , price , "3km"));
                                }
                                maxpage = ++page;
                                page = page-1;
                            }else if(code == 205){


                                //已无更多数据
                                //maxpage = page;
                                page = maxpage;
                                msg.what=0x001;
                                mHandler.sendMessage(msg);


                            }else if(code == 404){
                                //未找到数据
                                msg.what = 0x002;
                                mHandler.sendMessage(msg);
                            }


                        } catch (JSONException e) {
                            e.printStackTrace();
                            Log.i("----------------", "客户端内部错误");
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        Log.i("----------------","服务器出错"+volleyError.toString());


                    }
                });
        mreuestQueut.add(jsreq);
    }


}




这里的MyAdapter的方法是自定义的,详情请参考慕课网的徐大神的《Android必学-BaseAdapter的使用与优化》