#android #checkbox
#Android #флажок
Вопрос:
У меня есть listview с пользовательским адаптером массива, и я пытаюсь выяснить, как сохранить состояние, в котором были отмечены позиции. Я думал о сохранении позиции флажка в массиве int каждый раз, когда проверяется элемент, а затем в getView, если массив содержит номер, он установил бы IsChecked () == true. Однако я действительно не знаю, как выполнять поиск по массиву. Любая помощь была бы отличной! вот некоторый базовый код для адаптера:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Contact c = (Contact) getItem(position);
final ViewHolder viewHolder = new ViewHolder();
// if the array item is null, nothing to display, just return null
if (c == null) {
return null;
}
LayoutInflater inflater = (LayoutInflater)
getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TwoLineListItem view;
if (convertView == null) {
view = (TwoLineListItem) inflater.inflate(resourceId, parent, false);
} else {
view = (TwoLineListItem) convertView;
}
final int pos = position;
final SharedPreferences myprefs = PreferenceManager.getDefaultSharedPreferences(getContext());
final SharedPreferences.Editor editor = myprefs.edit();
viewHolder.checkbox = (CheckBox)view.findViewById(R.id.checkbox);
viewHolder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (buttonView.isChecked()){
contactInfo.add(pos "," c.getName() "," c.getNumber());
StringBuilder sb = new StringBuilder();
for (String s : contactInfo)
{
sb.append(s);
sb.append("t");
}
editor.putString("contacts", sb.toString()).commit();
}else {
contactInfo.remove(pos "," c.getName() "," c.getNumber());
StringBuilder sb = new StringBuilder();
for (String s : contactInfo)
{
sb.append(s);
sb.append("t");
}
editor.putString("contacts", sb.toString()).commit();
}
}
});
Ответ №1:
CheckBox check =(CheckBox)v.findViewById(R.id.check);
check.setTag(new Integer(childPosition));
check.setChecked(listEditable.get(childPosition).isSelected());
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
Integer myPosition=(Integer)buttonView.getTag();
if ( isChecked )
{
listEditable.get(myPosition).setSelected(true);
}
else
{
listEditable.get(myPosition).setSelected(false);
}
}
});