1:main 布局
<xlistview.bawei.com.xlistviewlibrary.XListView
android:id="@+id/xlv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:background="#c4c5c6"
android:layout_height="50dp"
android:gravity="center_vertical">
<CheckBox
android:id="@+id/cb"
android:layout_marginLeft="30dp"
android:button="@drawable/print_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/text"
android:layout_marginLeft="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全选"/>
</LinearLayout>
2:main 代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private CheckBox cb;
private XListView xlv;
private Handler handler=new Handler();
private int startNum=0;
private JSONArray data;
private JSONArray jsonArray;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlv= (XListView) findViewById(R.id.xlv);
cb= (CheckBox) findViewById(R.id.cb);
cb.setOnClickListener(this);
xlv.setPullRefreshEnable(true);
xlv.setPullLoadEnable(true);
xlv.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
startNum=0;
getServerData();
cb.setChecked(false);
handler.postDelayed(new Runnable() {
@Override
public void run() {
xlv.stopRefresh();
}
},2000);
}
@Override
public void onLoadMore() {
startNum++;
getServerData();
cb.setChecked(false);
handler.postDelayed(new Runnable() {
@Override
public void run() {
xlv.stopLoadMore();
}
},2000);
}
});
//获取网络数据
getServerData();
}
private void getServerData() {
String url = "http://www.93.gov.cn/93app/data.do?" + "channelId=" + 0 + "&startNum=" + startNum;
//采用volley网络请求框架
RequestQueue queue = Volley.newRequestQueue(this);
StringRequest request=new StringRequest(url, new Response.Listener<String>() {
@Override
//响应成功
public void onResponse(String s) {
try {
JSONObject jsonObject=new JSONObject(s);
data = jsonObject.getJSONArray("data");
if(startNum==0){
jsonArray = new JSONArray();
}
for (int i=0;i<data.length();i++){
jsonArray.put(data.get(i));
}
//设置适配器
initAdapter(jsonArray);
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
//响应失败
public void onErrorResponse(VolleyError volleyError) {
}
});
//把响应请求添加到响应队列
queue.add(request);
}
private void initAdapter(JSONArray jsonArray) {
if(adapter==null){
adapter = new MyAdapter(this, jsonArray, new MyAdapter.OnClickListener() {
@Override
public void onCheck(boolean check) {
//全选
cb.setChecked(check);
}
});
adapter.serData(jsonArray);
xlv.setAdapter(adapter);
}else{
adapter.serData(jsonArray);
}
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.cb:
boolean checked = ((CheckBox) v).isChecked();
adapter.notfinycheck(checked);
break;
}
}
}
3:适配器
public class MyAdapter extends BaseAdapter {
private Context context;
private JSONArray jsonArray;
private Map<String, Boolean> map = new HashMap<>();
//声明接口
public OnClickListener listener;
//定义接口
public interface OnClickListener {
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 notfinycheck(boolean checkFlag) {
setcheck(checkFlag);
notifyDataSetChanged();
}
public MyAdapter(Context context, JSONArray jsonArray, OnClickListener listener) {
this.context = context;
this.jsonArray = jsonArray;
this.listener = listener;
setcheck(false);
}
public void serData(JSONArray jsonArray) {
this.jsonArray = jsonArray;
setcheck(false);
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);
TextView tv = (TextView) convertView.findViewById(R.id.tv);
ImageView image = (ImageView) convertView.findViewById(R.id.image);
final CheckBox ch_item = (CheckBox) convertView.findViewById(R.id.ch_item);
try {
JSONObject jsonObject = jsonArray.getJSONObject(position);
String title = jsonObject.getString("TITLE");
String imageurl = jsonObject.getString("IMAGEURL");
final String id = jsonObject.getString("ID");
tv.setText(title);
Picasso.with(context).load(imageurl).into(image);
ch_item.setChecked(map.get(id));
ch_item.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 values = map.get(key);
if (!values) {
isChecked = false;
//取消全选
listener.onCheck(isChecked);
return;
}
}
if (isChecked) {
//全选
listener.onCheck(isChecked);
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
return convertView;
}
}
4:适配器布局
<CheckBox
android:id="@+id/ch_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:button="@drawable/print_selector" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp" />
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="20dp" />
</LinearLayout>