Нужно выводить список товаров с бд приложения. Пишу такое (код упрощен):
public class CartActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks
scAdapter = new SimpleCursorAdapter(this, R.layout.rowlayout, null, from, to, 0);
lvData.setAdapter(scAdapter);
registerForContextMenu(lvData);
getSupportLoaderManager().initLoader(0, null, this);
}
где rowlayout помимо текста есть еще две кнопки
При клике на которую нужно открывать таблицу.
Подскажите, как можно получить item_id (то есть тот в котором находиться кнопка) и как потом передать этот id в следующую активити и там уже сделать еще один запрос в бд и вывести таблицу?
Ответ
Для того, чтобы обработать клик на вложенных в айтем элементах, вам необходимо использовать кастомный адаптер списка - привязка метода обработки клика в разметке тут не подходит для решения такой задачи.
Поскольку вы используете стандартный SimpleCursorAdapter, то переделка потребуется минимальная - переопределить метод bindView() этого адаптера, чтобы он реагировал на клики по вложенным элементам:
public class CustomAdapter extends SimpleCursorAdapter {
public CustomAdapter(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, final Context context, Cursor cursor) {
super.bindView(view, context, cursor);
Button button2 = (Button)view.findViewById(R.id.button2);
final long id = cursor.getLong(cursor.getColumnIndex("_id"));
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, SomeActivity.class);
intent.putExtra("ID", id);
context.startActivity(intent);
}
});
}
}
Здесь мы привязываем к кнопке на разметке айтема с id = button2 слушатель, при клике на эту кнопку будет вызвана активити - SomeActivity, в качестве аргумента ей будет передан ID записи из БД, на которой была нажата кнопка.
Чтобы получить значение ID в нашей SomeActivity нужно проделать нехитрую манипуляцию по извлечению значения из отправленного интента:
public class SomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.some_layout);
long ID = getIntent().getLongExtra("ID", -1); // -1 - значение по умолчанию, если ничего не получено.
...
}
}
Кроме того, вам нужно изменить используемый адаптер с SimpleCursorAdapter на созданный вами CustomAdapter (название, естественно может быть более уместным):
public class CartActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks
scAdapter = new CustomAdapter(this, R.layout.rowlayout, null, from, to, 0);
lvData.setAdapter(scAdapter);
registerForContextMenu(lvData);
getSupportLoaderManager().initLoader(0, null, this);
}
Все готово.
Замечу, что при использовании кликабельных элементов внутри айтема, могут появится нежелательные проблемы с фокусом каждого элемента, так как имеется конкуренция.
Комментариев нет:
Отправить комментарий