#java #android
В общем есть список 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{
Ответы
Ответ 1
То, что не работает 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); } }Ответ 2
Если подытожить, рабочий кусок кода: public class MainActivity extends FragmentActivity { public String LOG_TAG = "LOG_TAG"; public ListView lvData; public MyAdapter scAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); lvData = (ListView) findViewById(R.id.lvData); ///попробую тут адаптер инициализировать String[] from = new String[] {"client_tel","timeToWashStart"}; int[] to = new int[] {R.id.client_tel,R.id.timeToWashStart}; Log.d(LOG_TAG,"формируем адаптер"); // создааем адаптер и настраиваем список /// scAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item, null, from, to, 0); scAdapter = new MyAdapter(MainActivity.this, R.layout.item, null, from, to, 0); lvData.setAdapter(scAdapter); // создаем лоадер для чтения данных http://startandroid.ru/ru/uroki/vse-uroki-spiskom/278-urok-136-cursorloader.html // по этой ссылке описано что делает следующая строка, это получение данных getSupportLoaderManager().initLoader(0, null, MainActivity.this); } И, как рекомендовал shwarz-andrei, создаем отдельный класс для адаптера 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) { final ImageView img = (ImageView) view.findViewById(R.id.ivImg); img.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); } }
Комментариев нет:
Отправить комментарий