Страницы

Поиск по вопросам

вторник, 27 ноября 2018 г.

android ListView с кнопками. Как получить _id строки, на которой кликнута кнопка

В общем есть список ListView, который я заполняю через SimpleCursorAdapter. Инициализируется вот так:
String[] from = new String[] {"client_tel","timeToWashStart"}; int[] to = new int[] {R.id.client_tel,R.id.timeToWashStart};
scAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item, null, from, to, 0); lvData.setAdapter(scAdapter);
getSupportLoaderManager().initLoader(0, null, MainActivity.this);
Данные получаю через CursorLoader с MySQL, список формируется, все нормально. Но в каждой строке списка есть кнопки, на которые нужно кликать.
Вот сам вопрос: как узнать _id или позицию строки, где была кликнута кнопка?
причем метод
lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "position = " + position + " id= " + id, Toast.LENGTH_SHORT).show(); } });
почему-то не работает... и я никак не пойму как прописать метод getView() для адаптера.
Скажите в какую сторону думать, я уже запарился на месте топтаться) Заранее благодарен за советы
ПС: весь код у меня реализован в одном классе, может это важно
public class MainActivity extends FragmentActivity implements CompoundButton.OnCheckedChangeListener,LoaderManager.LoaderCallbacks {


Ответ

То, что не работает setOnItemClickListener, можно только догадываться. Выгрузите код, тогда будет ответ.
Узнать позицию и id при нажатии на кнопку (cursorloader), можно разными вариантами, самый очевидный и простой на мой взгляд:

Делаем кастомный SimpleCursorAdapter, находим нашу кнопку, вешаем слушатель. Далее получаем его родителя (элемент в списке) у этого элемента получаем родителя это и есть наш список и относительно их находим позицию в списке. Зная позицию получаем id:
MyAdapter.class
public class MyAdapter extends SimpleCursorAdapter { public MyAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { super(context, layout, c, from, to, flags); }
@Override public void bindView(View view, Context context, final Cursor cursor) { Button btn = (Button) view.findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { View parent_row = (View) v.getParent(); ListView lv = (ListView) parent_row.getParent(); final int position = lv.getPositionForView(parent_row);
Log.d("...", "position = " + position); Log.d("...", "id = " + getItemId(position)); } }); super.bindView(view, context, cursor); } }

Комментариев нет:

Отправить комментарий