Puedo crear una base de datos y de la tabla (categorías) con columnas (_id, título, …)
Quiero leer las categorías de base de datos y mostrar la lista de categorías como la de un listview.

aquí es y código:

   public class MainActivity extends listActivity{
private ArrayAdapter arrayAdapter;
ArrayList results = new ArrayList();
ListView catlist;
Cursor cur;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
catlist = getListView();
int parentid = getIntent().getIntExtra("catid", 0);
openAndQueryDatabase(parentid);
displayCatListView();
}
private void displayCatListView() {
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, results));
catlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
final int position, long id) {
Toast.makeText(MainActivity.this,
"List View Clicked:" + position, Toast.LENGTH_LONG)
.show();
}
});     
}
private void openAndQueryDatabase(int parentid) {
DataBaseHelper db = new DataBaseHelper(this);
SQLiteDatabase dbr = db.getReadableDatabase();
cur = dbr.rawQuery(
"SELECT _id, title, has_sub FROM categories where parent_id=?",
new String[] { String.valueOf(parentid) });
if (cur != null) {
while (cur.moveToNext()) {
int cat_id = cur.getInt(cur.getColumnIndex("_id"));
String cattitle = cur.getString(cur.getColumnIndex("title"));
int has_sub = cur.getInt(cur.getColumnIndex("has_sub"));
results.add(cat_id + cattitle + has_sub);
}
cur.close();
}
db.close();
}
}

1) puedo obtener la posición onItemClick. pero quiero llegar a la categoría de _id onItemClick. por favor, ayudar

2) soy nuevo. ¿hay algún error en mis códigos ?

muchas gracias

InformationsquelleAutor | 2013-07-13

2 Comentarios

  1. 1

    Lugar de

    int cat_id = cur.getInt(cur.getColumnIndex("_id"));
    String cattitle = cur.getString(cur.getColumnIndex("title"));
    int has_sub = cur.getInt(cur.getColumnIndex("has_sub"));
    results.add(cat_id + cattitle + has_sub);

    crear una Categoría de clase para contener estos valores, y el uso de parámetros ArrayList. Algo así como

    class Category {
    public int cat_id;
    public String cattitle;
    public int has_sub;
    public Category(int cat_id, ...) {
    //constructor logic here
    }
    }

    y

    results.add(new Category(cat_id, cattitle, has_sub));

    Con esto, usted puede establecer la onItemClickListener como tal:

            catlist.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v,
    final int position, long id) {
    Category clickedCategory = results.get(position);
    int id = clickedCategory.cat_id;
    //do something with id
    }
    });     

    Su ArrayList es el origen de datos de su ArrayAdapter, y position se corresponde con el índice del hecho clic en la Categoría en ella.

    • gracias por tu respuesta. podría usted explicar esto más a esta parte por favor: class Category { public int cat_id; public String cattitle; public int has_sub; public Category(int cat_id, ...) { // constructor logic here } } o enlace de un ejemplo completo?
    • gracias 🙂 mi problema resuelto
    • Podría usted por favor, seleccione un completo tutorial sobre el uso del objeto en lugar del objeto arraylist?
    • Mi código anterior utiliza la original ArrayList en Ji.Mack el código de mantener instancias de la Categoría de clase. Por lo tanto, estamos utilizando objetos con un ArrayList, no en lugar de.
    • buen trabajo gracias……
  2. 12

    Uso CursorAdapter(http://developer.android.com/reference/android/widget/CursorAdapter.html) en cambio, cuando se utiliza ArrayAdapter es superar la asignación de memoria, y también no recibir notificaciones si db cambiado.

    Además, en el caso de utilizar CursorAdapter tendrá

    public void onItemClick(AdapterView<?> parent, View v, final int position, long id)

    el «id» param va de acuerdo con la tabla del campo _id

    para obtener toda la fila que acaba de hacer

    adapter.getItem(int position)
    • Esta es una mucho mejor respuesta
    • nunca nuevo id funciona de esta manera. +1 para que esta información útil.

Dejar respuesta

Please enter your comment!
Please enter your name here