Android在listView中获取子项

CBeTJlu4ok

我有一个ArrayAdapter for listView里面有复选框。当复选框的值更改时,我想获取选中复选框的项目列表。

onCreate我的活动的内部功能

ArrayAdapter<DrawerDetail> adapter = new ArrayAdapter<DrawerDetail>(this, R.layout.settings_minidrawer_item, apps) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null){
            convertView = getLayoutInflater().inflate(R.layout.settings_minidrawer_item, null);
        }
        ImageView appIcon = (ImageView)convertView.findViewById(R.id.item_app_icon);
        appIcon.setImageDrawable(apps.get(position).icon);
        appIcon.setTag(apps.get(position).name);
        TextView appLabel = (TextView)convertView.findViewById(R.id.item_app_name);
        appLabel.setText(apps.get(position).label);
        appLabel.setText(Integer.toString(position));
        CheckBox appCheck = (CheckBox)convertView.findViewById(R.id.item_app_check);
        appCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                UpdatePreferences();
            }
        });

        return convertView;
    }
};

list.setAdapter(adapter);

updatePreferences

public void UpdatePreferences() {
    SharedPreferences.Editor prefEditor = prefs.edit();

    SparseBooleanArray checked = list.getCheckedItemPositions();

    List<String> drawerListArray = new ArrayList<String>();
    View v;
    CheckBox c;
    for(int i = 0; i < list.getAdapter().getCount(); i++) {
        v = list.getAdapter().getView(i, null, list);
        c = (CheckBox) v.findViewById(R.id.item_app_check);
        TextView aka = (TextView) v.findViewById(R.id.item_app_name);
        aka.setText("dd");
        Log.e("checked: ", Boolean.toString(c.isChecked()));
    }
}

如果检查SparsBooleanArray checked值,则始终为null。list.getAdapter().getView()似乎没有用。

此行找不到任何视图(不返回错误,但无法获取/设置值):

c = (CheckBox) v.findViewById(R.id.item_app_check);
TextView aka = (TextView) v.findViewById(R.id.item_app_name);

我尝试了不同的方法,但无法使其正常工作。现在,我的猜测是我正在重写getView适配器的方法,并且它们彼此冲突,但是我无法提出任何方法来解决如何覆盖getView的问题,因为它对两者都适用。

托马斯·祖拉(Tomasz Czura)

不要检索这些视图。在onCheckedChangeListener中传递已检查/未检查的信息-例如,字符串和信息(如果已检查/未检查)。然后,您可以收集数组中的已检查项目。

尝试做这样的事情:

public class TestClass {

    private List<String> checkedStrings = new ArrayList<>();

    ...

    void updateArray(boolean checked, String checkedText){
        if(checked){
            if(!checkedStrings.contains(checkedText)){
                checkedStrings.add(checkedText);
            }
        } else {
            checkedStrings.remove(checkedText);
        }
    }
}

并在您的ArrayAdapter中:

appCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                updateArray(isChecked, apps.get(position).label);
            }
        });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Listview上的Android子项

来自分类Dev

Android RecyclerView 获取子项

来自分类Dev

在umbraco中获取子项

来自分类Dev

Android ListView子项目

来自分类Dev

Android:在ListView中获取数据

来自分类Dev

如何将 firebase 数据库的子项获取到 android listview

来自分类Dev

从Redis的哈希中获取子项

来自分类Dev

在子项中获取父指令

来自分类Dev

在 JSON DataSnapshot 中获取子项

来自分类Dev

Android:ListView子项重复数据

来自分类Dev

带有子项的ListView。Android示例

来自分类Dev

根据在Android中选择的项目更新ListView中的子项目

来自分类Dev

在ListView中获取值微调器(android)

来自分类Dev

如何从TextView或ListView Android中获取文本?

来自分类Dev

获取Android中ListView项的值

来自分类Dev

在android的listview中获取重复的行

来自分类Dev

Android从RecyclerView中删除子项

来自分类Dev

获取ListView项相对于Form的子项的坐标

来自分类Dev

Firebase - 获取所有子项并添加到 ListView

来自分类Dev

如何从Delphi中的TRESTReponse获取子项值?

来自分类Dev

在SQL中获取递归表的子项

来自分类Dev

获取LINQ列表中的所有子项

来自分类Dev

在ExpandableListview中获取特定子项的视图

来自分类Dev

如何从Delphi中的TRESTReponse获取子项值?

来自分类Dev

在SQL中获取递归表的子项

来自分类Dev

获取LINQ列表中的所有子项

来自分类Dev

根据变量中的子项获取XML值

来自分类Dev

如何从Android ListView中的选定行中获取值?

来自分类Dev

在Android中将子项动态添加到ListView