Android получает данные от курсора при нажатии на макет?

#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);
            }
        });