0

私は Android プログラミングが初めてで、リスト ビューに問題があります。私のアプリでは、データベース (名前、ID、年) からデータを読み取り、それらをリストビューに追加する必要があります。その後、ユーザーは項目の 1 つを選択し、新しい再びアクティビティ db からデータを読み取り、ユーザーの選択に基づいて他の項目の一部をリストします Ol の時点で 最初のアクティビティでは、データを読み取り、それらをリストビューに追加します。選択するには、リスナーを定義する必要があります。このコードのように定義します

enter code here @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_read_book);

    String SDcardPath = Environment.getExternalStorageDirectory().getPath();
    String DbPath = SDcardPath + "/Tosca/" + "persian_poem.db";
    ListView list = (ListView) findViewById(R.id.list_poet_name);

    try {
        db = SQLiteDatabase.openDatabase(DbPath,null,SQLiteDatabase.CREATE_IF_NECESSARY);
        getData();
        db.close();

    }
    catch (SQLiteException e) {
        Toast.makeText(this, e.getMessage(), 1).show();
    }

    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            // TODO Auto-generated method stub
            ListView list = (ListView) findViewById(R.id.list_poet_name);
            Log.i(TAG, "Listview get Item Pos");
            Peot_ID.putString ("Peot_ID", (String) list.getItemAtPosition(position));
            Intent Book_list_intent = new Intent (Read.this,Book_list.class);
            Book_list_intent.putExtras(Peot_ID);
            startActivity(Book_list_intent);
        }

    });





}
private void getData() {


        try {
        //txtMsg.append("\n");
        // obtain a list of from DB
            String TABLE_NAME = "classicpoems__poet_contents";
            String COLUMN_ID = "poet_id";
            String _ID = "_id";
            String COLUMN_NAME = "poet_name";
            String COLUMN_CENTURY = "century_start";
            String [] columns ={_ID,COLUMN_ID,COLUMN_NAME,COLUMN_CENTURY};

        Cursor c = db.query(TABLE_NAME,columns,null, null, null, null, COLUMN_ID);

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, c, 
               new String[] {COLUMN_NAME,COLUMN_CENTURY}, new int[] {android.R.id.text1,android.R.id.text2}, 0);

    ListView list = (ListView) findViewById(R.id.list_poet_name);
    list.setAdapter(adapter);



        } catch (Exception e) {
        Toast.makeText(this, e.getMessage(), 1).show();
        }


}

しかし、ここで問題があります.peot_id(dbの_id列とは異なります)のデータを次のアクティビティに送信したい..このコードでは、選択したアイテムの行全体を取得できると述べましたが、 it(peot_id) 選択したリスト項目から Peot_ID だけを取得する方法を教えてください。別の質問があります..私のコードでわかるように、1つの空間リストビューを数回参照する必要があります..このコードで定義するたびに

enter code hereListView list = (ListView) findViewById(R.id.list_poet_name);

このリストビューを 1 回定義して、コード内の複数の場所で使用するにはどうすればよいですか? public 変数のような sth またはそのような sth 助けてくれてありがとう。

4

3 に答える 3

0

特定の列レコードのみを取得するには、次のようなクエリを実行します。

Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
              KEY_NAME, KEY_DESIGNATION}, KEY_ROWID + "=" + yourPrimaryKey, null,
              null, null, null, null);
        if (mCursor != null) {
          mCursor.moveToFirst();
        }
于 2013-03-28T09:38:00.277 に答える
0

私のコードでわかるように、このコードで定義するたびに、1 つの空間リストビューを数回参照する必要があります。

いいえ。1 つのグローバルListView変数リストを作成するだけで、アクティビティのどこからでもアクセスできます。メソッドで ListView を再度宣言して初期化する必要はありませんOnItemClick()

次のアクティビティに peot_id (db の _id 列とは異なります) のデータを送信したいのですが、このコードを使用すると、選択したアイテムの行全体を取得でき、その一部 (peot_id ) だけが必要であると述べました。選択したリスト項目から Peot_ID だけを取得する方法は?

Android で定義された基本レイアウトを使用しています

android.R.layout.simple_list_item_2

行用に独自のXMLファイルを作成し、ListView から View 全体を取得し、View からのみ取得することをお勧めしますID

例:

listrow.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:background="@drawable/addresses_list_selector"
    >

    <TextView 
        android:id="@+id/id_column"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <TextView 
        android:id="@+id/name_column"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/id_column"
        />

    <TextView 
        android:id="@+id/century_column"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/name_column"
        />

</RelativeLayout>

次に、使用法CursorAdapter

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.listrow, c, 
      new String[] {COLUMN_ID, COLUMN_NAME, COLUMN_CENTURY}, 
      new int[] {R.id.id_column, R.id.name_column, R.id.century_column}, 0);

次に、行から ID を取得します。

public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
   TextView id = (TextView) v.findViewById(R.id.id_column);
   if (id != null) {
      String idString = id.getText().toString();
   }
}

ノート:

Android の定義済みレイアウトを引き続き使用する場合は、String[] from に渡してから、from 行ID_COLUMNにアクセスする必要があります。IDrow.findViewById(<id>);

String[] from = {ID_COLUMN, NAME_COLUMN};
int[] to = {android.R.id.text1, android.R.id.text2};
TextView id = v.findViewById(android.R.id.android.R.id.text1);
String idString = id.getText().toString();
于 2013-03-28T09:38:48.630 に答える
0

onListItemclick()私は個人的にそのような方法を使用することを好みます

// オーバーライドすることを忘れないでください - 非常に重要です

@Override

public void onListItemClick(ListView l, View v, int position, long id) {
 //TODO what you what you have here the vars position - position of the selected item in list
// and also the id so you can easy trace what selection done the user
// you can play with this 

}
于 2013-11-01T21:43:57.973 に答える