У меня есть ArrayAdapter для listView, который имеет флажок внутри. Когда значение флажка изменено, я хочу получить список элементов с отмеченными флажками.Android Получить дочерние элементы в 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
значение, это всегда нуль. Также list.getAdapter().getView()
похоже не работает.
эти строки не может найти вид (не возвращает ошибку, но не может получить/установить значение):
c = (CheckBox) v.findViewById(R.id.item_app_check);
TextView aka = (TextView) v.findViewById(R.id.item_app_name);
Я пробовал разные aproaches, но не мог заставить его работать. Теперь я предполагаю, что я переопределяю метод для адаптера, и они конфликтуют друг с другом, но я не мог придумать, как переопределить getView таким образом, чтобы он работал для обоих.
да, но в моем случае мне нужно, чтобы все проверенные значения были не только теми, которые я только что проверил. мой подход, кажется, является невосприимчивым. Я новичок в android – CBeTJlu4ok
Да, я понимаю - вы можете создать массив в классе и поместить/удалить отмеченные/непроверенные элементы в этот массив в методе UpdatePreferences, когда вызывается onCheckedChange. Вы также хотите обновить соответствующую строку списка, например. изменить название? –
нет только списка отмеченных флажков, но я должен иметь возможность установить тег из этого флажка. Что значит создать массив в классе? – CBeTJlu4ok