2

データベースの名前からリストビューを埋めています。それはすべて正常に機能しています。名前のリストアイテムをクリックした後onListItemClick、別のアクティビティでテキストビューに入力するように設定したいと思います。それは私が立ち往生しているところです。

これが機能している私のリストビューアクティビティのコードです:

public class DataListView extends ListActivity {

private ArrayList<String> results = new ArrayList<String>();

private SQLiteDatabase newDB;


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

    openAndQueryDatabase();

    displayResultList();


}
private void displayResultList() {
    ListView hotelslist = (ListView) findViewById(android.R.id.list);
    hotelslist.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, results));
   getListView().setTextFilterEnabled(true);



}

 @Override
  public void onListItemClick(ListView l, View v, int position, long id) {

     super.onListItemClick(l, v, position, id);
      Toast.makeText(getBaseContext(), l.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show();


  }

private void openAndQueryDatabase() {
    try {

        DataBaseHelper newDB = new DataBaseHelper(this, "mydatabase.sqlite");

        SQLiteDatabase sdb = newDB.getReadableDatabase();


        Cursor c = sdb.rawQuery("SELECT name FROM hotel ORDER BY name ASC", null);



if (c != null ) {
    if  (c.moveToFirst()) {
        int i = 0;
        do {
            i++;
            String name = c.getString(c.getColumnIndex("name"));


            results.add(name);
        }while (c.moveToNext());
    } 

}       



    } catch (SQLiteException se ) {
        Log.e(getClass().getSimpleName(), "Could not create or Open the database");
    } finally {
        if (newDB != null) 

            newDB.close();
    }

}

} 

名前の他に、テーブルには「address」列と「telephone」列も含まれています。このデータは、次のxmlを使用して別のアクティビティのテキストビュー「addressfill」および「telephonefill」に入力したいと思います。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >
 <TextView
    android:id="@+id/name"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
     />
 <TextView
    android:id="@+id/address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Address" />
 <TextView
    android:id="@+id/addressfill"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
  <TextView
    android:id="@+id/telephone"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Telephone number" />
  <TextView
    android:id="@+id/telephonefill"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />


</LinearLayout>

私はそこにある多くのチュートリアルとここにある多くの投稿を読み込もうとしましたが、正しい答えを見つけることができませんでした。

onListItemClick提示したxmlを使用するアクティビティで、およびでどのコードを使用する必要がありますか。ヘルプは非常にありがたいです!

4

2 に答える 2

1

リストアイテムにリスナーを設定する場合は、配列アダプターを拡張し、リスナーコードをアダプターに配置する必要があります。

public class SettingsListAdapter extends ArrayAdapter<String> {

     @Override
     public View getView(int position, View convertView, ViewGroup parent){
          // put your listener in here
                  mybutton.setOnClickListener(new View.OnClickListener() {          
                @Override
                public void onClick(View v) {
                    // do work here
                }

     }


}

言い換えれば、simplelistadapterはあなたが望むことをするのに十分ではなく、あなたはあなた自身のものを作成する必要があるでしょう。

編集

独自のカスタムArrayAdapterを作成する良い例を次に示します。カスタムアレイアダプターチュートリアル

于 2012-10-07T15:49:46.897 に答える
0

インonListItemClick()テントを作成し、その名前をインテントに入力します。

Intent intent = new Intent(DataListView.this, SecondActivity.class);
intent.putExtra("name", l.getItemAtPosition(position).toString());
startActivity(intent);

SecondActivity名前を受け取るアクティビティのクラス名に変更する必要があります。

この2番目のアクティビティonCreate()では、文字列を読み取ります。

String name = getIntent().getStringExtra("name");
if(name != null) {
    // Do something with the name, like selecting the address 
    //   and telephone number from your database to display
}

ただし、データベースを使用しているため、実際にはSimpleCursorAdapterを使用する必要があります。カーソルでの作業は、より便利で効率的です。


住所や電話など、テーブルの他の列のデータに対してどのように行うことができますか?

2つのオプションがあります。

  1. 2番目のアクティビティでは、次のようなクエリを使用します。

    "SELECT address, telephone FROM Hotel WHERE name = '" + name + "'"
    

    ただし、複数のホテルが同じ名前の場合、複数の住所を取得します...

  2. 最初のアクティビティのクエリを次のように変更します。

    "SELECT name, address, telephone FROM Hotel ORDER BY name"
    

    これでonListItemClick()、名前、住所、電話番号を一度に渡すことができますが、住所と電話番号をどこかに保存する必要があります...これはSimpleCursorAdapter非常に役立つ場所です。

于 2012-10-07T17:27:28.463 に答える