У меня есть список элементов, отображаемых адаптером курсора, когда я использую onItemClick
, я получаю правильную строку и могу делать то, что мне нужно (моя цель - добавить представление к этому элементу при щелчке. теперь мне нужно это действие t происходит при нажатии кнопки в ячейке listView
, однако события нажатия кнопки возвращают не правильную ячейку, а скорее случайные другие ячейки в списке, вот пример из моего кода:
public class CustumAdapter extends CursorAdapter implements OnClickListener{
private Context context;
private Button btn_maybe;
private String name;
public CustumAdapter(Context context, Cursor c, LatLng position) {
super(context, c);
this.position = position;
this.context = context;
}
@Override
public void bindView(View view, final Context context, Cursor c) {
name = c.getString(c.getColumnIndex(ContractPlaces.PLACE_NAME));
btn_maybe = (Button) view.findViewById(R.id.cursor_layout_maybe);
btn_maybe.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//i need to use the correct view from BindView here
}
});
nameView.setText(name);
В этом примере кода я хочу, чтобы щелчок по кнопке в ячейке позволил мне получить доступ к представлению, в котором кнопка действительно находится, однако я получаю обратно представления из случайных ячеек списка, как я могу получить правильную информацию о ячейке в моем прослушивателе кликов?
РЕДАКТИРОВАТЬ:
поэтому благодаря @darnmason я понял это, чтобы получить представление для элемента списка с помощью события щелчка в адаптере курсора, установите для рассматриваемой кнопки тег, который будет cursor.getPosition(), поэтому тег является правильным позиция элемента, в истинной сущности жизненного цикла списка, если я хочу просмотреть элемент в определенной позиции, я позвоню
//where lv is the ListView (you can pass it to the adapter as a parameter).
//getChildAt returns a view in a position
//value is the value of cursor.getPosition() so its the correct position of the item where //the button was clicked.
//lv.getFirstVisiblePosition() is the first position that is actually on screen,
View view = lv.getChildAt(value - lv.getFirstVisiblePosition());
когда вы вычтете это из фактической позиции, вы получите нужную позицию, не забудьте добавить
if(view == null)
return;
чтобы избежать исключений.