- 前言:獲取ListView中CheckBox多選值的方式多種多樣,比如利用setMultiChoiceModeListener這個接口通過監(jiān)聽ListView獲取到選中值,也可以通過HashMap的鍵值來記錄CheckBox對應(yīng)位置的選中狀態(tài)從而拿到選中值,不過我自己結(jié)合網(wǎng)上的情況做了一個比較簡單的方法,本人是個小白,也不知道這種方法的的利弊,只是想分享出來,大神如果有什么看法請指導,謝謝;
- 原理:在自定義Adapter中創(chuàng)建存儲CheckBox值的數(shù)組checkBoxIDList,通過設(shè)置CheckBox的狀態(tài)改變監(jiān)聽事(setOnCheckedChangeListener)對checkBoxIDList進行值的添加與移除;在Adapter中對checkBoxIDList進行g(shù)et set,最后在MainActivity即可通過get拿到checkBoxIDList中的值(即checkBox選中值);
- 重點代碼:
Adapter:setOnCheckedChangeListener
MainActivity:adapter.getCheckBoxIDList()
Adapter;
public class Adapter extends BaseAdapter {
private List<String> stringList;
private Context mContext;
private List<String> checkBoxIDList; //存儲checkBox的值
//get set
public List<String> getCheckBoxIDList() {
return checkBoxIDList;
}
public void setCheckBoxIDList(List<String> checkBoxIDList) {
this.checkBoxIDList = checkBoxIDList;
}
public Adapter(List<String> stringList, Context mContext) {
this.stringList = stringList;
this.mContext = mContext;
checkBoxIDList= new ArrayList<>();
}
@Override
public int getCount() {
return stringList.size();
}
@Override
public Object getItem(int position) {
return stringList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
final TestViewHolder testViewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item, null);
testViewHolder = new TestViewHolder();
testViewHolder.item_checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
convertView.setTag(testViewHolder);
} else {
testViewHolder = (TestViewHolder) convertView.getTag();
}
//設(shè)置checkBox的值
testViewHolder.item_checkBox.setText("List:" + stringList.get(position).toString());
//獲取復選框選中狀態(tài)改變事件進行增刪改
testViewHolder.item_checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
/*
* b=選中狀態(tài)
* if b = true 將值添加至checkBoxIDList
* if b = false 將值從checkBoxIDList移除
* */
if (b) {
checkBoxIDList.add(testViewHolder.item_checkBox.getText().toString());
} else {
checkBoxIDList.remove(testViewHolder.item_checkBox.getText().toString());
}
}
});
return convertView;
}
static class TestViewHolder {
CheckBox item_checkBox;
}
}
MainActivity;
public class MainActivity extends AppCompatActivity {
private List<String> TestAdapterList;
private Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listView = (ListView) findViewById(R.id.listview);
//對List賦值
TestAdapterList= new ArrayList<>();
TestAdapterList.add("1");
TestAdapterList.add("2");
TestAdapterList.add("3");
TestAdapterList.add("4");
TestAdapterList.add("5");
TestAdapterList.add("6");
TestAdapterList.add("7");
TestAdapterList.add("8");
TestAdapterList.add("9");
//setAdapter
adapter = new Adapter(TestAdapterList, MainActivity.this);
listView.setAdapter(adapter);
//button單擊
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
System.out.println("------------");
/*
*循環(huán)打印選中checkBox的值
*通過adapter.getCheckBoxIDList()獲取所選checkBox值的集合
*/
for (int i = 0; i < adapter.getCheckBoxIDList().size(); i++) {
System.out.println(adapter.getCheckBoxIDList().get(i).toString());
}
}
});
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。