15

我想有一個ListView的OnItemClickListener創建使用ArrayAdapterOnItemClickListener使用ArrayAdapter爲ListView控件

這是我用它來創建它的代碼:

List<Comment> values = datasource.some_search("Wednesday","11"); 
     ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this, 
       android.R.layout.simple_list_item_1, values); 
     setListAdapter(adapter); 

如何實現onItemClickListener?

謝謝!

編輯:我在我的ArrayAdapter和ListView中使用一個對象的字符串。

編輯2:更多的代碼:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



     datasource = new CommentsDataSource(this); 
     datasource.open(); 
     //check if database is populated if NOT, populate with txtToDb(); 

     if (!datasource.isPopulated()) { 
      // Database is not populated so copy it from assets here 
      try { 
       txtToDb(); 
       Log.i("Database", "Was not Populated"); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       Log.i("Database", "Was not populated: txtToDb(); failed"); 

      } 

     } else { 
      Log.i("Database", "Populated"); 
     } 

     //wat to show on screen: 
     List<Comment> values = datasource.search("Wednesday","11"); 


     // Use the SimpleCursorAdapter to show the 
     // elements in a ListView 
     ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this, 
       android.R.layout.simple_list_item_1, values); 
     setListAdapter(adapter); 

    } 

編輯3:XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/group" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <Button 
      android:id="@+id/add" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Add New" 
      android:onClick="onClick"/> 

     <Button 
      android:id="@+id/delete" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Delete First" 
      android:onClick="onClick"/> 

    </LinearLayout> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 

</LinearLayout> 
+0

你可以調用setonItemClickListner方法.. – Piyush

+0

@ piyush-你能告訴我怎麼做嗎?如何創建將其與上面給出的ArrayAdapter進行鏈接的方法? –

回答

54

使用OnItemClickListener

ListView lv = getListView(); 
    lv.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> adapter, View v, int position, 
      long arg3) 
     { 
      String value = (String)adapter.getItemAtPosition(position); 
      // assuming string and if you want to get the value on click of list item 
      // do what you intend to do on click of listview row 
     } 
    }); 

當你點擊一行時,一個監聽器被觸發。所以你在列表視圖上使用setOnClickListener並使用匿名內部類OnItemClickListener

您也覆蓋onItemClick。第一個參數是一個適配器。第二個參數是觀點。第三個參數是位置(列表視圖項目的索引)。

使用獲得該物品的位置。

編輯:從您的意見,我認爲你需要設置轉接器O列表視圖

因此,假如你的活動來延長ListActivtiy

 setListAdapter(adapter); 

或者,如果您的活動類擴展活動

 ListView lv = (ListView) findViewById(R.id.listview1); 
    //initialize adapter 
    lv.setAdapter(adapter); 
+0

我很困惑這個方法是如何與上面的數組適配器相鏈接的?當然,我不能只複製粘貼,並期望它的工作。我是一個相對的新手,所以請多解釋一下。謝謝。 –

+0

「//假設字符串,如果你想獲得點擊列表項的價值」我假設這裏是我鍵入的代碼,如果一個項目被點擊時做些什麼? –

+0

@AhmedZafar你可以做你想做的事情,而不是當你點擊該行時獲取該項目。確切地說 – Raghunandan

6

,你可以用這樣的方式......

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       final int position, long id) { 

      String main = listView.getSelectedItem().toString(); 
     } 
    }); 
+1

我不明白這個方法是如何知道它與上面的ArrayAdapter鏈接的? –

+0

表示你想從適配器獲得價值? – Piyush

+0

我有顯示的列表,存儲在ArrayAdapter中。當我點擊列表中的一個項目時,我希望它做一些事情。撥打一個號碼,具體說明。我怎樣才能使用這種方法,以便它做到這一點? listView並不是我在代碼中指定的東西,請告訴我更多關於這個函數是如何工作的以及如何使用它。我很困惑。 –

2

好的,在你的Activity擴展ListActivity的信息之後,這裏有一個實現OnItemClickListener的方法:

public class newListView extends ListView { 

    public newListView(Context context) { 
     super(context); 
    } 

    @Override 
    public void setOnItemClickListener(
      android.widget.AdapterView.OnItemClickListener listener) { 
     super.setOnItemClickListener(listener); 
     //do something when item is clicked 

    } 

} 
+0

我已經更新了我認爲相關的東西! –

+0

您的Activity是否擴展了ListActivity? – Heisnberg

+0

是的!我從哪裏去? –

1

我使用arrayadpter,使用這種follwed代碼我能夠得到物品

字符串值=(字符串)adapter.getItemAtPosition(位置);

listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      String string=adapter.getItem(position); 
      Log.d("**********", string); 

     } 
    });