Android personalizzato ListView selezionato bambini Articolo?
-
26-09-2019 - |
Domanda
Ho una fila listview personalizzata che contiene una serie di componenti TextView. Al posto della voce "standard" testo unico, ho creato un oggetto in cui ogni riga dell'elenco articolo contiene diversi bit di informazioni. Per questo esempio, ho un id disco, un nome e una descrizione per ogni riga della listview.
Ho il mio ListView popolato tramite
this.mDbHelper = new RecordDBAdapter(this);
this.mDbHelper.open();
Cursor c = this.mDbHelper.fetchAllRecords();
startManagingCursor(c);
String[] from = new String[] {RecordDBAdapter.ROW_ID, RecordDBAdapter.NAME, RecordDBAdapter.DESCRIPTION};
int[] to = new int[] {R.id.recordId, R.id.lblName, R.id.lblDescription};
// Now create an array adapter and set it to display using our row
SimpleCursorAdapter records = new SimpleCursorAdapter(this, R.layout.record_row, c, from, to);
this.list.setAdapter(dives);
Ora quello che voglio è essere in grado di accedere al valore recordId all'interno di ogni elemento è fatto clic. Ho cercato di seguire il tutorial Android senza alcun risultato. Fanno qualcosa come
Object o = adapter.getItemAtPosition(position);
, ma che ancora non aiuta. Quello che voglio davvero è quello di ottenere il valore della recordId all'interno di ogni listItem selezionato. Qualcuno sa come questo sarebbe essere realizzato? Ecco il mio evento onItemClick:
protected OnItemClickListener onListItemClick = new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long rowId) {
// My goal is either to grab the value of the
// recordId value from the textView, or from the adapter.
//Object o = adapter.getItemAtPosition(position); //Tried this, no joy
Intent intent = new Intent(NeatActivity.this, SomeOtherActivity.class);
// intent.putExtra("selectedRecordId",val); //val here is a numerical record row id being passed to another activity.
startActivity(intent);
}
};
Soluzione
Si sta cercando di fare troppo fuori dalla classe di adattatori di default. Hai bisogno di scrivere la propria classe adattatore, estendere simplecursoradapter
, e allora si può fare qualsiasi metodo si vuole ottenere quello che vuoi in qualsiasi posizione che si desidera.