Android: отображение данных listview из базы данных после onclick

#android #listview #onclick #android-sqlite #android-cursor

#Android #listview #onclick #android-sqlite #android-курсор

Вопрос:

У меня есть такая база данных: таблица pepak, категория таблицы, подкатегория таблицы Я просто хочу отобразить категорию, если я нажму на одну из pepak.name Но теперь, если я нажму на один из pepak.name , мое приложение столкнулось с ошибкой и остановилось.

Вот мой код:

Menu.java

 public class Menu extends ListActivity{
    protected SQLiteDatabase db;
    protected Cursor cursor;
    protected ListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        db = (new DatabaseHelper(this)).getWritableDatabase();
        cursor = db.rawQuery("SELECT _id, name FROM pepak", null);
        adapter = new SimpleCursorAdapter(
        this, 
        R.layout.pepaklist,
        cursor, 
        new String[] {"name"}, 
        new int[] {R.id.name});
        setListAdapter(adapter);
}

public void onListItemClick(ListView parent, View view, int position, long id) {
    Intent intent = new Intent(this, PepakCats.class);
    Cursor cursor = (Cursor) adapter.getItem(position);
    intent.putExtra("PEPAK_ID", cursor.getInt(cursor.getColumnIndex("_id")));
    startActivity(intent);
}

@Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {
    // TODO Auto-generated method stub
    super.onCreateOptionsMenu(menu);
    MenuInflater blowUp =  getMenuInflater();
    blowUp.inflate(R.menu.coll_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch(item.getItemId()){

    case R.id.about:
        Intent i = new Intent("com.pepakbahasajawa.ABOUT");
        startActivity(i);
        break;

    case R.id.exit:
        finish();
        break;
    }
return false;
}
  

}

PepakCats.java

 public class PepakCats extends ListActivity {
    protected Cursor cursor;
    protected ListAdapter adapter;
    protected int pepakId;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.category);

        pepakId = getIntent().getIntExtra("PEPAK_ID", 0);
        SQLiteDatabase db = (new DatabaseHelper(this)).getWritableDatabase();

        Cursor cursor = db.rawQuery(
            "SELECT _id, pepakId, catname FROM category WHERE pepakId = ?", 
        new String[]{"" pepakId}
        );

        adapter = new SimpleCursorAdapter(
            this, 
            R.layout.category_list,
            cursor, 
            new String[] {"catname"}, 
            new int[] {R.id.catname}
        );

        setListAdapter(adapter);
    }
}
  

Как я могу отобразить данные listview из базы данных после щелчка?

Комментарии:

1. Проверьте вывод logcat в перспективе DDMS и опубликуйте его здесь, если вы не можете его интерпретировать. Трудно догадаться, что происходит, не имея сообщения об ошибке.

2. Курсор курсора = (Курсор) adapter.GetItem(позиция); Что это??

Ответ №1:

Попробуйте использовать идентификатор напрямую:

 public void onListItemClick(ListView parent, View view, int position, long id) {
            Intent intent = new Intent(this, PepakCats.class);
            intent.putExtra("PEPAK_ID", id);
            startActivity(intent);
        }