Android通過Adapter獲取ListView中的多選內容
阿新 • • 發佈:2019-02-16
前言:獲取ListView中CheckBox多選值的方式多種多樣,比如利用setMultiChoiceModeListener這個介面通過監聽ListView獲取到選中值,也可以通過HashMap的鍵值來記錄CheckBox對應位置的選中狀態從而拿到選中值,不過我自己結合網上的情況做了一個比較簡單的方法,本人是個小白,也不知道這種方法的的利弊,只是想分享出來,大神如果有什麼看法請指導,謝謝;
原理:在自定義Adapter中建立儲存CheckBox值的陣列checkBoxIDList,通過設定CheckBox的狀態改變監聽事(setOnCheckedChangeListener)對checkBoxIDList
重點程式碼: Adapter 60-80行 MainActivity 40-44行;
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();
}
//設定checkBox的值
testViewHolder.item_checkBox.setText("List:" + stringList.get(position).toString());
//獲取複選框選中狀態改變事件進行增刪改
testViewHolder.item_checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
/*
* b=選中狀態
* 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("------------");
/*
*迴圈列印選中checkBox的值
*通過adapter.getCheckBoxIDList()獲取所選checkBox值的集合
*/
for (int i = 0; i < adapter.getCheckBoxIDList().size(); i++) {
System.out.println(adapter.getCheckBoxIDList().get(i).toString());
}
}
});
}
}