2012-10-07 55 views
2

我從數據庫的名稱填充列表視圖。這一切工作正常。點擊名稱後,我想設置onListItemClick填寫其他活動的文字瀏覽。那是我卡住的地方。由sql db填充的listview與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(); 
    } 

} 

} 

除了表還包含「地址」和「電話」列名。這個數據我想在textviews「addressfill」,並與下面的XML另一活動的「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的活動。非常感謝幫助!

回答

0

onListItemClick()創建一個意向,並在意圖把名字:

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

你必須改變SecondActivity添加到將接收名稱的活動的類名稱。

在本次活動的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數據庫工作。使用光標更有用,更高效。


我怎麼能做到這一點的表像地址和電話另一列中的數據?

你有兩個選擇:

  1. 在你的第二個活動使用的查詢,如:

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

    但如果多個酒店有相同的名字,你會得到多個地址...

  2. 更改您查詢您的第一項工作:

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

    現在onListItemClick()你可以一次全部通過的名稱,地址和電話號碼,但你需要存儲的地址和電話號碼某處...這是一個SimpleCursorAdapter非常有用

+0

謝謝。那爲名字起作用。我怎麼能爲表格的其他列數據如地址和電話? – SunnySonic

+0

謝謝。我去了你的第一個選項,並保存了我創建的另一個數組中的所有字符串。那完美的工作。 – SunnySonic

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的一個很好的例子:Custom Array Adapter Tutorial

+0

謝謝你的回答,但我不能相當遵循。我有一個列表,當點擊一個列表項目時,我想移動到另一個活動,在我創建的文本視圖中顯示名稱,地址和電話。我不想放一個額外的按鈕。 – SunnySonic

+0

我不能將字符串傳遞給我的新活動,然後將它們放入textviews中? – SunnySonic

+0

該按鈕只是一個示例 - 您可以將偵聽器放在任何視圖上。當事件觸發時,用意圖打開新的活動。我的設計風格經常將聽衆附加到整個佈局,因此點擊列表項目的任何部分都會觸發事件。 –