2017-01-01 4 views
3

Я на данный момент программирование APP с ListView, который заполняется данными из таблицы SQLite, как это:Android получать данные из ListView

public void printDatabase(){ 
    Cursor c = handler.getAllRows(); 
    String[] fieldNames = new String[] {DBHandler.COLUMN_WORKER_ID, DBHandler.COLUMN_WORKER_NAME, DBHandler.COLUMN_WORKER_SURNAME, DBHandler.COLUMN_WORKER_COST}; 
    int[] toView = new int[] {R.id.item_worker_id, R.id.item_worker_name, R.id.item_worker_surname, R.id.item_worker_cost}; 
    SimpleCursorAdapter cAdapter; 
    cAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.worker_items, c, fieldNames, toView, 0); 
    list = (ListView) findViewById(R.id.worker_listView); 
    list.setAdapter(cAdapter); 
} 

Теперь я хотел бы получить данные из listview элемента, щелкнув элемент. Я искал везде, чтобы найти решение для этого, и нашел это:

class ItemListener implements AdapterView.OnItemClickListener{ 

    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     Object o = list.getItemAtPosition(i); 
     String s = list.toString(); 
    } 
} 

Но все, что я получаю от этого ссылка на курсор, который я использовал для заполнения ListView. Что мне нужно, чтобы получить данные из списка?

ответ

2

Вы на полпути к вашему решению уже.

Cursor itemCursor = (Cursor) list.getItemAtPosition(i); 

Это возвращает курсор, указывающий на указанную строку. Вы можете получить данные из него, как:

class ItemListener implements AdapterView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     Cursor itemCursor = (Cursor) list.getItemAtPosition(i); 

     String workerId = itemCursor.getString(itemCursor.getColumnIndex(DBHandler. COLUMN_WORKER_ID)); 
     String workerName = itemCursor.getString(itemCursor.getColumnIndex(DBHandler.COLUMN_WORKER_NAME)); 
     String workerSurname = itemCursor.getString(itemCursor.getColumnIndex(DBHandler.COLUMN_WORKER_SURNAME)); 
     String workerCost = itemCursor.getString(itemCursor.getColumnIndex(DBHandler.COLUMN_WORKER_COST)); 
    } 
} 
+0

Спасибо так много, что он работает :) – Leonzen

0

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

class ItemListener implements AdapterView.OnItemClickListener{ 

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
    TextView textView = (TextView) view.findViewById(R.id.list_content); 
     String text = textView.getText().toString(); 
     //Log.d("Choosen: " + text); 
}} 
1

Сделать курсор глобальным;

Cursor cursor ; 

В вашем OnItemClick

class ItemListener implements AdapterView.OnItemClickListener{ 

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
    cursor.moveToPosition(position); 
    String Id = cursor.getString(itemCursor.getColumnIndex(DBHandler. COLUMN_WORKER_ID)); 
} 

} 
+1

О Боже, почему глобальная переменная? –

+0

Потому что это дешевле, чем литье сэра. –

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