1

SQLite データベースから ListView を作成しましたが、各 ListView アイテムにリスナーを追加して、アイテムをクリックしたときにそのアイテムに関する詳細情報を含む別のページを表示できるようにする方法に行き詰まっています。データベースはサンプルです。どんな助けでも大歓迎です。

public class Database extends ListActivity {

private final String SAMPLE_DB_NAME = "myFriendsDb";
//private final String SAMPLE_TABLE_NAME = "friends";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    ArrayList<String> results = new ArrayList<String>();
    SQLiteDatabase db = null;

    try {
        db =  this.openOrCreateDatabase(SAMPLE_DB_NAME, MODE_PRIVATE, null);

        db.execSQL("CREATE TABLE IF NOT EXISTS people" +
                " (LastName VARCHAR, FirstName VARCHAR," +
                " Country VARCHAR, Age INT(3));");

        db.execSQL("INSERT INTO people" +
                " Values ('Jones','Bob','UK',30);");
        db.execSQL("INSERT INTO people" +
                " Values ('Smith','John','UK',40);");
        db.execSQL("INSERT INTO people" +
                " Values ('Thompson','James','UK',50);");

        Cursor c = db.rawQuery("SELECT FirstName, LastName FROM people", null);

        if (c != null ) {
            if  (c.moveToFirst()) {
                do {
                    String firstName = c.getString(c.getColumnIndex("FirstName"));
                    String lastName = c.getString(c.getColumnIndex("LastName"));
                    results.add("" + firstName + " " + lastName);
                }while (c.moveToNext());
            } 
        }

        this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,results));

    } catch (SQLiteException se ) {
        Log.e(getClass().getSimpleName(), "Could not create or Open the database");
    } finally {
        if (db != null) 
            db.execSQL("DELETE FROM people");
            db.close();
    }
}

}

4

1 に答える 1

1

あなたの問題を解決する方法はたくさんあります。考えられる解決策の 1 つとして、ListActivity に保護されたメソッド onListItemClick(ListView l, View v, int position, long id) を実装するだけです。

public class Database extends ListActivity {

    //YOUR CODE ABOVE HERE...

    public static final String SHOWITEMINTENT_EXTRA_FETCHROWID = "fetchRow";
    public static final int ACTIVITY_SHOWITEM = 0; /*Intent request user index*/

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id){
        /*
        position variable holds the position of item you clicked...
        do your stuff here. If you want to send to another page, say another activity
        that shows your stuff, you can always use an intent
        example:
        */
        Intent tmpIntent = new Intent(this, YourActivityForShowingItem.class);
        tmpIntent.putExtra(SHOWITEMINTENT_EXTRA_FETCHROWID, position);
        startActivityForResult(tmpIntent, ACTIVITY_SHOWITEM);

    }
}

または、getListView() を使用して listActivity の ListView にアクセスし、通常の ListView オブジェクトの場合と同様に、リスナーまたはコンテキスト メニューのセッターを呼び出すことができます。たとえば、このアプローチを使用してリスナーを設定するこの関数:

private void setMyListListener(){
    getListView().setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id){
            /*same fake code as above for calling another activity using an intent:*/
            Intent tmpIntent = new Intent(this, YourActivityForShowingItem.class);
            tmpIntent.putExtra(SHOWITEMINTENT_EXTRA_FETCHROWID, position);
            startActivityForResult(tmpIntent, ACTIVITY_SHOWITEM);
        }
    });
}

この関数は、アクティビティの全期間にわたって同じ方法でクリック リスナーを構成する場合は、後で onCreate(...) 関数によって呼び出すことができます。

于 2012-04-28T02:02:27.300 に答える