У меня есть ListView с настраиваемым адаптером. Каждая строка в списке имеет 3 текстовых поля и счетчик. Мне нужно получить связанные данные в текстовом представлении, как только пользователь выберет элемент счетчика. Итак, представьте себе listView следующим образом: |texView|textView|textView|Spinner| Выбрав что-то в столбце счетчика, мне нужно получить 3 данных textview. Но я не могу этого добиться.
Я схожу с ума о том, как заставить это работать. Вот код CustomAdapter:
private class ViewHolder {
Spinner rateSpinner;
TextView pView;
TextView nView;
TextView cView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater vi =
(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.todolist_item, null);
holder = new ViewHolder();
holder.pView = (TextView)convertView.findViewById(R.id.r1);
holder.nView = (TextView)convertView.findViewById(R.id.r2);
holder.cView = (TextView)convertView.findViewById(R.id.r3);
holder.rateSpinner = (Spinner)convertView.findViewById(R.id.spinner2);
convertView.setTag(holder);
holder.rateSpinner.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
Object item = parent.getItemAtPosition(pos);
selectedRating = item.toString();
Log.v("Chosen rating from spinner", selectedRating); //<-this works correctly
Log.v("**********************","**");// <------- Problem: Need to get list view's textview entries with the associated spinner. But its just not working. Always printing the same wrong textview data
Log.v("Order Name",item._nText);
Log.v("Order Count",item._cText);
Log.v("Order Price",item._pText);
Log.v("**********************","**");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.rateSpinner = (Spinner)convertView.findViewById(R.id.spinner2);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(c,
android.R.layout.simple_spinner_item, list);
holder.rateSpinner.setAdapter(adapter);
fItem item = getItem(position);
holder.pView.setText(item._pText);
holder.nView.setText(item._nText);
holder.cView.setText(item._cText);
return convertView;
}
TextViews в списке загружаются первыми из базы данных. А затем пользователю предлагается выбрать оценки из спиннера. После того, как пользователь выбирает рейтинг, мне нужно найти связанные элементы textView, и я не понимаю, как получить данные этой строки. См. Оператор печати в onItemSelectedListener() счетчика.
Был бы очень признателен за вашу помощь, чтобы понять это.
holder.personSpinner = (Spinner)convertView.findViewById(R.id.spinner2);
в ЕСЛИ - person SweetWisher ツ   schedule 17.11.2014ViewHolder
с 3TextViews
, которые вы хотите, и установить его в свойrateSpinner.setTag(...)
. В вашем слушателе view.getTag() должен дать вам то, что вы хотите. - person Groco   schedule 17.11.2014