volley+swiperefreshlayout實現checkbox全選

1.依賴 jar包

compile project(':swiperefreshlayoutlibrary')

2.佈局

   activity_main

<com.bawei.swiperefreshlayoutlibrary.SwipyRefreshLayout
    android:id="@+id/srl"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</com.bawei.swiperefreshlayoutlibrary.SwipyRefreshLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:background="@android:color/white"
    android:gravity="center_vertical"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:button="@drawable/select_choose" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="全選"
        android:textSize="20sp" />
</LinearLayout>
item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/item_checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:button="@drawable/select_choose" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="rtyui"
            android:textSize="20sp" />

        <ImageView
            android:id="@+id/iv"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@mipmap/ic_launcher" />
    </LinearLayout>
</LinearLayout>
3.代碼

MainActivity

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Adapter;
import android.widget.CheckBox;
import android.widget.ListView;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.bawei.swiperefreshlayoutlibrary.SwipyRefreshLayout;
import com.bawei.swiperefreshlayoutlibrary.SwipyRefreshLayoutDirection;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private SwipyRefreshLayout srl;
    private ListView lv;
    private CheckBox checkBox;
    private int startNum = 0;
    private Handler handler = new Handler();
    private JSONArray jsonArray;
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        srl = (SwipyRefreshLayout) findViewById(R.id.srl);
        lv = (ListView) findViewById(R.id.lv);
        checkBox = (CheckBox) findViewById(R.id.checkBox);
        checkBox.setOnClickListener(this);

        //設置刷新機制
        srl.setColorSchemeColors(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark, android.R.color.holo_blue_bright);
        srl.setDirection(SwipyRefreshLayoutDirection.BOTH);
        srl.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() {

            @Override
            public void onRefresh(int index) {
                checkBox.setChecked(false);
                startNum = 0;
                getData();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        srl.setRefreshing(false);
                    }
                }, 2000);
            }

            @Override
            public void onLoad(int index) {
                checkBox.setChecked(false);
                startNum++;
                Log.i("aaa",startNum+"");
                getData();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        srl.setRefreshing(false);
                    }
                }, 2000);

            }
        });
        getData();
    }

    private void getData() {
        //獲取請求隊列
        RequestQueue queue = Volley.newRequestQueue(this);
        String url = "http://www.93.gov.cn/93app/data.do?" + "channelId=" + 0 + "&startNum=" + startNum;
        //創建StringRequest
        StringRequest request = new StringRequest(url, new Response.Listener<String>() {
            //響應成功
            @Override
            public void onResponse(String s) {
                Log.i("bbb",s);
                try {
                    JSONObject jsonObject = new JSONObject(s);
                    JSONArray data = jsonObject.getJSONArray("data");
                    if (startNum == 0) {
                        jsonArray = new JSONArray();
                    }
                    for (int i = 0; i < data.length(); i++) {
                        jsonArray.put(data.get(i));
                    }
                    initListView(jsonArray);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });
        //把請求方式添加到請求隊列
        queue.add(request);
    }

    private void initListView(JSONArray jsonArray) {
        if (adapter == null) {
            adapter = new MyAdapter(this, jsonArray, new MyAdapter.OnCheckListener() {

                @Override
                public void onCheck(boolean check) {
                    checkBox.setChecked(check);
                }
            });
            adapter.setData(jsonArray);
            lv.setAdapter(adapter);
        } else {
            adapter.setData(jsonArray);
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.checkBox:
                boolean checked = ((CheckBox) v).isChecked();
                if (checked) {
                    adapter.notityCheck(checked);
                } else {
                    adapter.notityCheck(checked);
                }
                break;
        }
    }
}
MyAdapter

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;


public class MyAdapter extends BaseAdapter {
    private Context context;
    private JSONArray jsonArray;
    //存儲條目id和狀態
    private Map<String, Boolean> map = new HashMap<String, Boolean>();
    //聲明接口
    public OnCheckListener listener;

    //定義接口
    public interface OnCheckListener {
        void onCheck(boolean check);
    }

    //保存條目id和狀態
    public void setCheck(boolean checkFlag) {
        map.clear();
        for (int i = 0; i < jsonArray.length(); i++) {
            try {
                String id = jsonArray.getJSONObject(i).getString("ID");
                map.put(id, checkFlag);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

    //更新狀態
    public void notityCheck(boolean checkFlag) {
        setCheck(checkFlag);
        notifyDataSetChanged();
    }

    public MyAdapter(Context context, JSONArray jsonArray, OnCheckListener listener) {
        this.context = context;
        this.jsonArray = jsonArray;
        this.listener = listener;
        //初始化狀態
        setCheck(false);
    }

    public void setData(JSONArray jsonArray) {
        setCheck(false);
        this.jsonArray = jsonArray;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return jsonArray != null ? jsonArray.length() : 0;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = View.inflate(context, R.layout.item, null);
        CheckBox item_checkbox = (CheckBox) convertView.findViewById(R.id.item_checkbox);
        TextView tv_title = (TextView) convertView.findViewById(R.id.tv_title);
        ImageView iv = (ImageView) convertView.findViewById(R.id.iv);
        try {
            JSONObject jsonObject = jsonArray.getJSONObject(position);
            String title = jsonObject.getString("TITLE");
            String imageurl = jsonObject.optString("IMAGEURL");
            final String id = jsonObject.optString("ID");

            tv_title.setText(title);
            Picasso.with(context).load(imageurl).into(iv);
            //獲取checkbox選中狀態
            item_checkbox.setChecked(map.get(id));
            item_checkbox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean checked = ((CheckBox) v).isChecked();
                    map.put(id, checked);
                    boolean isChecked = true;
                    for (String key : map.keySet()) {
                        Boolean value = map.get(key);
                        if (!value) {
                            isChecked = false;
                            listener.onCheck(isChecked);
                            return;
                        }
                    }
                    if (isChecked) {
                        listener.onCheck(isChecked);
                    }
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
        return convertView;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章