2011-12-31 2 views
1

У меня есть список, связанный с базой данных sqlite. У меня есть 3 элемента в базе данных, но каждый раз, когда я нажимаю на второе и третье значение, он дает мне тот же результат, что и самое первое значение в наборе записей. Как перемещаться по последующим элементам в наборе записей? Вот код:Listview не отображает правильные данные о строках при нажатии

  DBAdapter db = new DBAdapter(this); 
    db.open(); 

    lv = (ListView)findViewById(R.id.list); 

    //Get cursor for list items 
    cursor = db.getAllChannels(); 


    lv.setOnItemClickListener(new OnItemClickListener(){ 


     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int position, long arg3) { 


      //String cText = lv.getItemAtPosition(position).toString(); 

      //retrieve database values 
      Toast.makeText(getApplicationContext(), cursor.getString(cursor.getColumnIndex(DBAdapter.KEY_STATIONURL)), Toast.LENGTH_SHORT).show(); 

     } 

    }); 

ответ

0

Когда адаптер уже заселен с помощью курсора, вы должны воздерживаться от приобретения данных с помощью курсора, подаваемого к адаптеру. Вместо этого используйте getItem(int position), который должен вернуть курсор, который уже указал на правильный элемент в вашем списке. Ваш код будет выглядеть следующим образом:

lv.setOnItemClickListener(new OnItemClickListener(){ 


     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int position, long arg3) { 

      //retrieve database values 
      Cursor tempCursor = getItem(position); 
      Toast.makeText(getApplicationContext(), tempCursor.getString(tempCursor.getColumnIndex(DBAdapter.KEY_STATIONURL)), Toast.LENGTH_SHORT).show(); 

     } 

    }); 

Вы можете пойти на шаг дальше и переопределить ваш CursorAdapter-х getItem(position) так, что он возвращает Data * объект, где вам просто нужно getKeyStationUrl() *, чтобы получить значение, которое вам нужно.

+0

Большое спасибо за помощь. Очень ценится :-) – user615099

Смежные вопросы