2011-04-05 21 views
5

Tengo una tabla de categorías con dos columnas category_id y name. Creé una clase de ayudante de datos llamada CategoryDataHelper. Tengo un método llamado getCategoryCursor() de esa clase auxiliar que recupera el id y el nombre de la tabla de categorías y devuelve el cursor. Usando ese cursor, he usado SimpleCursorAdapter para mostrar la lista de categorías. Está funcionando bien.Cómo obtener el ID del artículo en un controlador onItemClick

public class Categories extends ListActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     categoryDataHelper = new CategoryDataHelper(getApplicationContext()); 
     Cursor categoryCursor = categoryDataHelper.getCategoryCursor(); 
     ListAdapter adapter = new SimpleCursorAdapter (
       this, 
       android.R.layout.simple_list_item_1, 
       categoryCursor,            
       new String[] { CategoryDataHelper.NAME },   
       new int[] {android.R.id.text1}); 

     // Bind to our new adapter. 
     setListAdapter(adapter); 

     list = getListView(); 
     list.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       // Here I want the category_id 
      } 
     }); 
    }  
} 

Ahora quiero poner en práctica un OnItemClickListener y enviar un Intención con el category_id de la categoría seleccionada. ¿Cómo puedo obtener la identificación en el método onItemClick()?

+0

no es el parámetro id del tipo long helping? –

+0

Para obtener los contenidos del elemento seleccionado, use Objeto o = lv.getItemAtPosition (position); El objeto o se puede seguir utilizando para obtener elementos. –

+0

¿Qué hace setListAdapter y por qué viene antes de list = getListView()? –

Respuesta

17

Probablemente debería obtener el cursor del adaptador. De esta forma, si el cursor se reemplaza, todavía recibirá un cursor válido.

Cursor cursor = ((SimpleCursorAdapter) adapterView).getCursor(); 
cursor.moveToPosition(position); 
long categoryId = cursor.getLong(cursor.getColumnIndex(CategoryDataHelper.ID)); 

o utilizar "category_id" o lo que sea el nombre de la columna está en su lugar de CategoryDataHelper.ID.

+9

'adapterView' por lo general no es un adaptador. Es una vista que usa adaptador y, por lo tanto, tiene el método 'getAdapter()'. Entonces, en su ejemplo, debería llamar a 'adapterView.getAdapter()' en su lugar. –

+0

¿Es aplicable con 'SimpleAdapter'? – Apurva

1

¿Y en onItemclick:

categoryCursor.moveToPosition(position); 

y luego desde el cursor devuelto obtener el ID de su ayudante?

+0

Cómo es posible ... puede dar la muestra de código –

2

Gracias Zack, podría solucionarlo con su publicación ... ¡Excelente! ... que enviar un parámetro de una actividad a otra de modo:

Intent myIntent = new Intent(Clientes.this, Edc.class); 
Cursor cursor = (Cursor) adapter.getItem(position); 
myIntent.putExtra("CLIENTE_ID", cursor.getInt(cursor.getColumnIndex("_id"))); 
startActivity(myIntent); 

En la otra actividad (EDC) .... me sale el parámetro de modo:

int _clienteId = getIntent().getIntExtra("CLIENTE_ID", 0); 
1

Con la SimpleCursorAdapter , la función onItemClick pasa en el ID de las bases de datos para el elemento seleccionado. Entonces, la solución es simplemente

long category_id = id 
Cuestiones relacionadas