как курсор узнает, какой элемент был нажат в списке? - PullRequest
4 голосов
/ 02 февраля 2012

У меня есть активность, отображающая журналы вызовов в ListView. Адаптер, используемый здесь для заполнения списка, расширяет CursorAdapter. Для Listview установлено значение onItemClickListener (..). Мой вопрос: всякий раз, когда на элемент нажимают, как курсор получает данные? как курсор узнает, какая позиция нажата, и нужно получать данные только по нажатой позиции? Я предоставил фрагмент кода.

public class CallLog extends Activity
{
   ListView mListView;
   Cursor cursor;

   //other variables


   public void OnCreate()
   {
        setContentView(R.layout.calllog);

        //SQLiteDatabaseInstance db
        cursor = db.query(...parameters to get all call logs...);
        mListView.setOnItemClickListener(this);
   }

   public void OnItemClick( // all arguments... )
   {
         //there is a column name 'NAME' in call log table in database 
         String name = cursor.getString(cursor.getColumnIndex(Database.NAME))

         //here name is obtained of the clicked item.
   }

Курсор - это набор результатов. как курсор узнает, по какому элементу щелкнули? Какими могут быть методы, неявно вызываемые курсором, который задает позицию щелкаемого элемента?

Если есть ссылки на аналогичные вопросы, просьба предоставить.

Я надеюсь, что смогу помочь вам понять вопрос. Спасибо

Ответы [ 4 ]

2 голосов
/ 02 февраля 2012

Попробуйте это:

    @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//move cursor to clicked row
     cursor.moveToPosition(position);
}
1 голос
/ 24 января 2017

Вы должны использовать cursor.moveToposition (position) внутри функции, чтобы добраться до позиции этого нажатого элемента. После этого вы примените это, и когда вы нажмете на любой элемент, курсор будет установлен на этот элемент, а затем вы сможете использовать этот конкретный элемент для вашей операции.

1 голос
/ 02 февраля 2012

В частности это НЕ Курсор, который знает, кто на что нажал. Это на самом деле обрабатывается адаптером. Адаптер используется для группировки элементов и предоставления возможности абстракции как таковой, чтобы они могли обрабатываться единообразно.

Любая форма списка, всегда имеет адаптер, и именно поэтому адаптер работает так хорошо. Если вы посмотрите на Custom Listview с помощью Custom Adapter, вы увидите, как именно это делается.

Пример:

http://android.vexedlogic.com/2011/04/02/android-lists-listactivity-and-listview-ii-%E2%80%93-custom-adapter-and-list-item-view/

0 голосов
/ 02 февраля 2012
     mListView..setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0,
        View view, int position, long id) {
        // here position gives the which item is clicked..

        }
    });

Дополнительно проверьте эту ссылку для ListView ListView и ListActivity

Это может помочь вам ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...