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; } }