В общем есть список 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);
}
}
Комментариев нет:
Отправить комментарий