现在的问题是 只能全选屏幕的的所有集合 不能把超出屏幕的checkBox 选中求 如何解决!package com.eastcom.intelligentanswer.ui;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;import com.eastcom.intelligentanswer.R;
import com.eastcom.intelligentanswer.dao.CallingDao;
import com.eastcom.intelligentanswer.db.MySqlHelper;
import com.eastcom.intelligentanswer.http.message.CallInterInfo;
import com.eastcom.intelligentanswer.vo.RingIntentObject;public class CallInter extends Activity implements OnClickListener {
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater layoutInflater;
private CallInterAdapter caAdapter = null;
private Button back, bt_ci_select; Dialog dialog;
private Context context;
ArrayList<CallInterInfo> interlist = new ArrayList<CallInterInfo>();
private static final int DIALOG_KEY = 0;
TextView emptytextView;
ListView listView;
RelativeLayout llr, sasd;
CheckBox check;
private List<String> data;
// 选中的手机号
protected String numberStr = "";
protected String[] autoContact = null;
protected String rowid = ""; protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.callinter);
context = CallInter.this;
listView = (ListView) findViewById(R.id.callinter_list);
back = (Button) findViewById(R.id.back);
back.setOnClickListener(this);
bt_ci_select = (Button) findViewById(R.id.bt_ci_select);
// 开始执行事件
new GetContactTask().execute("");
// 单机listView控件事件
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
check = (CheckBox) view.findViewById(R.id.cb_inter);
llr = (RelativeLayout) view.findViewById(R.id.rlt_callInter); if (check.isChecked()) {
check.setChecked(false);
numberStr = numberStr.replaceAll(interlist.get(position)
.getCallInterNumber(), "");
rowid = rowid.replaceAll(
interlist.get(position).getRowid(), "");
interlist.get(position).isCheck = false; } else {
CallInterInfo item = interlist.get(position);
check.setChecked(true);
numberStr = interlist.get(position).getCallInterNumber();
rowid = interlist.get(position).getRowid();
interlist.get(position).isCheck = true; }
} }); bt_ci_select.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
int n = interlist.size();
for (int index = 0; index < listView.getChildCount(); index++) {
View view = listView.getChildAt(index);
CheckBox check = (CheckBox) view
.findViewById(R.id.cb_inter);
check.setChecked(true);

numberStr = interlist.get(index).getCallInterNumber();
rowid = interlist.get(index).getRowid();
interlist.get(index).isCheck = true;
}
// 刷新页面 回传数据
Toast.makeText(context, "已全选", 20).show();
}
}); } // 弹出"查看"对话框
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_KEY: {
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("获取拦截名单中...请稍候");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
return dialog;
}
}
return null;
} // 开始查询
private class GetContactTask extends AsyncTask<String, String, String> {
public String doInBackground(String... params) { // 从本地手机中获取
GetBlackList();
return "";
} @Override
protected void onPreExecute() {
showDialog(DIALOG_KEY);
} @Override
public void onPostExecute(String Re) {
// 绑定LISTVIEW
if (interlist.size() == 0) {
Toast.makeText(context, "没有拦截记录!", 40).show();
} else {
caAdapter = new CallInterAdapter(context, interlist);
listView.setAdapter(caAdapter);
listView.setTextFilterEnabled(true);
// 编辑AUTOCOMPLETE数组
autoContact = new String[interlist.size()];
for (int c = 0; c < interlist.size(); c++) {
autoContact[c] = interlist.get(c).CallInterName + "("
+ interlist.get(c).CallInterNumber + ")"
+ interlist.get(c).getRowid();
}
}
removeDialog(DIALOG_KEY);
}
} // 查询拦截记录
private void GetBlackList() {
MySqlHelper mDbHelper = new MySqlHelper(context);
Cursor notesCursor = mDbHelper.selectCallInterList();
System.out.println("----------------Bigen-----------------");
// 开始查询
while (notesCursor.moveToNext()) {
CallInterInfo callinter = new CallInterInfo();
callinter.CallInterNumber = notesCursor.getString(notesCursor
.getColumnIndex("calling"));
String number = notesCursor.getString(notesCursor
.getColumnIndex("calling"));
callinter.Rowid = notesCursor.getString(notesCursor
.getColumnIndex("_id"));
RingIntentObject rbject = new RingIntentObject(this, number);
if (!rbject.getContactName().equals("")) {
callinter.CallInterName = rbject.getContactName();
} else {
callinter.CallInterName = "未知姓名";
}
callinter.isCheck = false;
interlist.add(callinter);
}
notesCursor.close();
mDbHelper.close();
System.out.println("----------------close-----------------"); } public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.back:
finish();
break;
}
} public class CallInterAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private HashMap<Integer, Boolean> isSelected; public CallInterAdapter(Context context,
ArrayList<CallInterInfo> itemList) {
mInflater = LayoutInflater.from(context);
interlist = itemList;
this.isSelected = new HashMap<Integer, Boolean>();
} public ArrayList<CallInterInfo> getItemList() {
return interlist;
} public void setItemList(ArrayList<CallInterInfo> itemList) {
interlist = itemList;
} public int getCount() {
// TODO Auto-generated method stub
return interlist.size();
} public Object getItem(int position) {
return position;
} public long getItemId(int position) {
return position;
} // 这个比较特殊,adapter是在页面变化的时候,重新获取当前页面的数据
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder; if (convertView == null) {
// 获得ViewHolder对象
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.callinteritem, null);
holder = new ViewHolder();
holder.callName = (TextView) convertView
.findViewById(R.id.tv_interName);
holder.callNumber = (TextView) convertView
.findViewById(R.id.tv_interNumber);
holder.callcheck = (CheckBox) convertView
.findViewById(R.id.cb_inter);
holder.inter_delete = (Button) findViewById(R.id.bt_ci_del);
convertView.setTag(holder);
} else {
// 取出holder
holder = (ViewHolder) convertView.getTag(); }
holder.callName.setText(interlist.get(position).getCallInterName());
holder.callNumber.setText(interlist.get(position)
.getCallInterNumber());
holder.callcheck.setChecked(interlist.get(position).getIsCheck()); holder.inter_delete.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
// 点击确认将选中的手机号回传
Intent intent = getIntent();
String[] callingStr = rowid.split(",");
CallingDao callingdb = new CallingDao(context);
for (int i = 0; i < callingStr.length; i++) { if (callingStr[i] != null && !callingStr[i].equals("")) { callingdb.delete_call(callingStr[i]);
setResult(RESULT_OK, intent);
Toast.makeText(context, "删除成功...正在刷新请稍后", 40)
.show();
intent.setClass(context, CallInter.class);
startActivity(intent);
finish();
} else {
Toast.makeText(context, "请选择要删除的号码", 40).show();
}
}
callingdb.close(); }
});
convertView.postInvalidate();
return convertView; } class ViewHolder {
TextView callName;
TextView callNumber;
CheckBox callcheck;
Button inter_delete;
} class ViewProgressHolder {
TextView text;
} public HashMap<Integer, Boolean> getIsSelected() {
return isSelected;
} public void setIsSelected(HashMap<Integer, Boolean> isSelected) {
this.isSelected = isSelected;
}
}
}

解决方案 »

  1.   

    屏幕中所有的,由于初学android  不太懂这个。
      

  2.   


     bt_ci_select.setOnClickListener(new OnClickListener() {            public void onClick(View v) {
                    // TODO Auto-generated method stub
                    int n = interlist.size();
                    for (int index = 0; index < listView.getChildCount(); index++) {
                        View view = listView.getChildAt(index);
                        CheckBox check = (CheckBox) view
                                .findViewById(R.id.cb_inter);
                        check.setChecked(true);
                        
                        numberStr = interlist.get(index).getCallInterNumber();
                        rowid = interlist.get(index).getRowid();
                        interlist.get(index).isCheck = true;
                    }
                    // 刷新页面 回传数据
                    //没有刷新代码
                    Toast.makeText(context, "已全选", 20).show();
                }
            });
      

  3.   

    因为你写的不对啊。在点击listview后,你才开始使用checkbox。你应该把checkbox放在listview的外面,然后做事件响应的时候,全选的checkbox是单独的事件。
    然后再listview中的checkbox先去掉焦点和click事件,不然优先级会报错。
    点全选的时候,获取listview中的checkbox控件,这样就能实现全选了。
      

  4.   


    bt_ci_select.setOnClickListener(new OnClickListener() {
    设置你数据list中相对应的checked属性为true,不要反射checkbox控件,
    设置后调用notifychange?更新lst绑定的listview还有
    holder.callcheck.setChecked(interlist.get(position).getIsCheck());());());
    你这个callcheck不需要onclick事件更新马?
      

  5.   

    請問是改了程序哪個地方,讓所有的checkbox選中呢!