Доступ к данным из другого представления внутри другого представления setOnCheckedListener

#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));