#android #listview #cursor
#Android #listview #курсор
Вопрос:
У меня есть макет для моей строки списка с некоторым текстом и макетом, который должен эмулировать кнопку. Проблема, с которой я сталкиваюсь, заключается в том, что я всегда буду получать последние данные в курсоре, то есть, если я нажму макет в первой строке, я должен получить grp id 1 и grp name ONE, но я получаю grp id 3, grp name THREE независимо от того, на какой макет я нажимаю в listview. Как это исправить? Мой код:
В методе getView
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
holder.text2 = (TextView) vi.findViewById(R.id.text2);
holder.layout1 = (LinearLayout)vi.findViewById(R.id.info);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
String grpCount = c.getString(c
.getColumnIndex(TestDbAdapter.KEY_GRP_COUNT));
holder.text2.setText("Channels: " grpCount);
holder.layout1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println(c.getString(c.getColumnIndex(TestDbAdapter.KEY_GRP_NAME)));
System.out.println(c.getString(c.getColumnIndex(TestDbAdapter.KEY_GRP_ID)));
}
});
return vi;
Ответ №1:
Просто проверьте это, я думаю, это должно быть исправлено следующим образом:
String grpCount = c.getString(c
.getColumnIndex(TestDbAdapter.KEY_GRP_COUNT));
final String grpName = c.getString(c.getColumnIndex(TestDbAdapter.KEY_GRP_NAME));
final String grpId = c.getString(c.getColumnIndex(TestDbAdapter.KEY_GRP_ID));
holder.text2.setText("Channels: " grpCount);
holder.layout1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println(grpName);
System.out.println(grpId);
}
});