#android #android-listview #simplecursoradapter #android-viewholder
#Android #android-listview #simplecursoradapter #android-viewholder
Вопрос:
У меня проблема с моим пользовательским адаптером, который расширяет simplecursoradapter. Проблема в том, что внутри прослушивателя для представления я хочу получить доступ к данным из другого представления. Я мог бы, вероятно, использовать checkedtextview, но я не думаю, что он выглядит хорошо.
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_of_ingredients, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.box = (CheckBox) convertView.findViewById(R.id.box);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Вот сложная часть внутри setOnCheckedListener я хотел бы получить доступ к тексту в текстовом представлении моего holder.name но я не знаю, как заставить это работать.
holder.box.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//array to store check / not checked
checkBoxState.set(position, isChecked);
}
});
вот остальной код, который, вероятно, не нужен, но я все равно добавляю его.
cursor.moveToPosition(position);
holder.name.setText(cursor.getString(cursor
.getColumnIndex(DatabaseHelper.COLUMN_NAME)));
holder.box.setChecked(checkBoxState.get(position));
return convertView;
}
Комментарии:
1. вы пробовали adapter.getView(position, null, listview) это вернет представление и вместе с ним его свойства
Ответ №1:
Итак, я полагаю, вы хотите получить доступ к своему holder.name в вашем setoncheckedchangelistener создайте класс, который расширяет этот прослушиватель, который выглядит следующим образом:
private class OnCheckedChangedListener implements OnCheckedChangeListener{
private ViewHolder mViewHolder;
public OnCheckedChangedListener(ViewHolder viewHolder){
this.mViewHolder = viewHolder;
}
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
final String name = this.mViewHolder.name.getText.toString();
}
}
и используйте его в своем флажке следующим образом:
viewHolder.checkBox.setOnCheckedChangedListener(new OnCheckedChangedListener(viewHolder));