Android通過Adapter獲取ListView中的CheckBox多選內(nèi)容


  • 前言:獲取ListViewCheckBox多選值的方式多種多樣,比如利用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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容