volley网络请求框架+CheckBox实现全选及单选
来源:互联网 发布:mac 桌面文件太多 编辑:程序博客网 时间:2024/06/06 14:18
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>
- volley网络请求框架+CheckBox实现全选及单选
- checkbox中全选和全不选及单选的实现
- 二级列表实现CheckBox单选及全选
- volley+swiperefreshlayout实现checkbox全选
- Volley框架实现Android网络请求笔记
- 网络请求框架---Volley
- Volley网络请求框架
- 网络请求框架---Volley
- 网络请求框架-Volley
- Volley-----网络请求框架
- Volley网络请求框架
- Volley网络请求框架
- Volley网络请求框架
- flex中datagrid checkbox全选及单选源码
- checkbox的单选、全选
- ListView CheckBox 全选,单选
- OkHttp请求网络数据二级列表实现购物车全选,单选,总价
- Volley网络请求框架分析
- 长尾理论及其启示
- 360一面面试题
- spring整合quartz框架定时任务实战
- OpenFace库(Tadas Baltrusaitis)中基于HOG进行正脸人脸检测的测试代码
- MSQL 相关知识
- volley网络请求框架+CheckBox实现全选及单选
- Tomcat配置JNDI资源(Tomcat配置连接池)
- ACM线段树。第兵布阵
- 【OpenCV3】级联分类器目标检测——cv::CascadeClassifier简介
- 学习记录 复杂网络MATLAB工具箱
- 位操作的原理
- Git 学习-第一节:基础和原理
- C++ 虚函数&纯虚函数&抽象类&接口&虚基类
- Spring整合定时任务调度框架Quartz实