簡體   English   中英

從自定義列表視圖中抓取每個選中的項目

[英]Grab every checked items from a custom listview

我需要從ListView中獲取每個選中的項目,其中自定義項目包含List <>變量中的每個復選框。 使用另一個List <>動態填充ListView。

到目前為止,我至少在點擊FAB時嘗試獲取列表中的每個選中項目。 我找了幾個解決方案,但沒有任何效果。 堅持使用SparseBooleanArray似乎可以避免任何錯誤和崩潰。

這是列表活動類:

        listViewWithCheckBox.setChoiceMode(listViewWithCheckBox.CHOICE_MODE_MULTIPLE);
        listViewWithCheckBox.setAdapter(new CustomAdapter(this, listViewItems));

        FloatingActionButton confirmFAB = findViewById(R.id.inviter_liste_confirm_fab);
        confirmFAB.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                SparseBooleanArray checked = listViewWithCheckBox.getCheckedItemPositions();
                System.out.println(listViewWithCheckBox.getCheckedItemPositions());
                System.out.println(listViewWithCheckBox.getCount());
                for (int i = 0; i < checked.size(); i++) {
                    if (checked.valueAt(i) == true) {
                        String tag = String.valueOf(listViewWithCheckBox.getItemAtPosition(checked.keyAt(i)));
                        Toast.makeText(getApplicationContext(), "" + tag, Toast.LENGTH_LONG).show();
                        Log.i("xxxx", i + " " + tag);
                    }
                }
            }
        });

這是我的自定義適配器實現ListAdapter,不包括空函數:

    ArrayList<ItemObjet> arrayList;
    Context context;

    public CustomAdapter(Context context, ArrayList<ItemObjet> arrayList) {
        this.arrayList=arrayList;
        this.context=context;
    }

    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }

    @Override
    public boolean isEnabled(int position) {
        return true;
    }

    @Override
    public int getCount() {
        return arrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ItemObjet subjectData=arrayList.get(position);
        if(convertView==null) {
            LayoutInflater layoutInflater = LayoutInflater.from(context);
            convertView=layoutInflater.inflate(R.layout.list_people_select_item, null);
            convertView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                }
            });
            TextView tittle=convertView.findViewById(R.id.inviter_list_nom);
            tittle.setText(subjectData.getName());
        }
        return convertView;
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }
    @Override
    public int getViewTypeCount() {
        return arrayList.size();
    }
    @Override
    public boolean isEmpty() {
        return false;
    }

這樣添加自定義適配器的回調。

然后在您的活動類中,添加一個全局變量以維護列表中已檢查項的ArrayList。 現在,當你在你喜歡的活動設置的適配器,可替代接口回調

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM