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);
            }       
        };
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top