1. 程式人生 > >Android通過Adapter獲取ListView中的多選內容

Android通過Adapter獲取ListView中的多選內容

前言:獲取ListViewCheckBox多選值的方式多種多樣,比如利用setMultiChoiceModeListener這個介面通過監聽ListView獲取到選中值,也可以通過HashMap的鍵值來記錄CheckBox對應位置的選中狀態從而拿到選中值,不過我自己結合網上的情況做了一個比較簡單的方法,本人是個小白,也不知道這種方法的的利弊,只是想分享出來,大神如果有什麼看法請指導,謝謝;

原理:在自定義Adapter中建立儲存CheckBox值的陣列checkBoxIDList,通過設定CheckBox的狀態改變監聽事(setOnCheckedChangeListener)checkBoxIDList

進行值的新增與移除;在Adapter中對checkBoxIDList進行get set,最後在MainActivity即可通過get拿到checkBoxIDList中的值(即checkBox選中值);

重點程式碼: 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());

                }

            }
        });
    }
}