15

ich eine OnItemClickListener für eine Listview haben, möchte ich schaffen mit einem ArrayAdapterOnItemClickListener mit ArrayAdapter für Listview

Dies ist der Code, den ich es erstellen verwenden:

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); 

Wie kann ich onItemClickListener implementieren?

Danke!

EDIT: Ich verwende in meinem ArrayAdapter und ListView eine Reihe von Objekten.

EDIT 2: More Code:

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); 

    } 

EDIT 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

können Sie setonItemClickListner-Methode dafür aufrufen. – Piyush

+0

@ piyush- Können Sie mir sagen, wie? Wie erstelle ich die Methode, die es mit dem oben angegebenen ArrayAdapter verbindet? –

Antwort

54

Verwenden 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 
     } 
    }); 

Wenn Sie auf eine Zeile klicken, wird ein Listener ausgelöst. Also du setOnClickListener auf der Listenansicht und verwende die anonyme innere Klasse OnItemClickListener.

Sie überschreiben auch onItemClick. Der erste Parameter ist ein Adapter. Zweiter Parameter ist die Ansicht. Der dritte Parameter ist die Position (Index der Listenansichtselemente).

Mit der Position erhalten Sie den Artikel.

Edit: Von Ihre Kommentare Ich gehe davon aus Sie ListActivtiy

 setListAdapter(adapter); 

den Adapter o Listenansicht

Ihre Aktivität So vorausgesetzt, erstreckt sich einstellen müssen oder wenn Sie Ihre Aktivitätsklasse Aktivität

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

Ich bin verwirrt, wie diese Methode mit dem Array-Adapter oben verknüpft ist? Sicher kann ich das nicht einfach kopieren und erwarten, dass es funktioniert. Ich bin ein relativer Neuling, also bitte ein bisschen mehr erklären. Vielen Dank. –

+0

"// Annahme String und wenn Sie den Wert auf den Klick auf Listenelement erhalten möchten" Ich nehme an, hier ist, wo ich den Code eingeben, der etwas tut, wenn ein Element angeklickt wird? –

+0

@AhmedZafar Sie können tun, was Sie vorhaben, anstatt das Element zu erhalten, wenn Sie auf die Zeile klicken. genau – Raghunandan

6

Sie auf diese Weise verwenden können ...

listView.setOnItemClickListener(new OnItemClickListener() { 

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

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

Ich verstehe nicht, wie diese Methode weiß, dass es mit dem ArrayAdapter oben verknüpft ist? –

+0

bedeutet, dass Sie Wert von Adapter erhalten möchten ?? – Piyush

+0

Ich habe die Liste, die angezeigt wird, im ArrayAdapter speichern. Wenn ich auf ein Element in der Liste klicke, möchte ich, dass es etwas tut. Rufen Sie eine Nummer an, um genau zu sein. Wie kann ich diese Methode verwenden, um das zu tun? listView ist nicht etwas, das ich in meinem Code angegeben habe. Kannst du mir bitte mehr darüber erzählen, wie diese Funktion funktioniert und wie ich sie verwenden werde. Ich bin verwirrt. –

2

erweitert Ok, nachdem die Information, dass Ihre Aktivität ListActivity erweitert, eine Möglichkeit ist, OnItemClickListener zu implementieren:

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

Ich habe aktualisiert, was ich für relevant halte! –

+0

Erweitert Ihre Aktivität ListActivity? – Heisnberg

+0

Ja, das tut es! Wohin gehe ich von dort? –

1

i arrayadpter bin mit, mit diesem Code follwed ich bin in der Lage Einzelteile zu erhalten

String-Wert = (String) adapter.getItemAtPosition (Position);

listView.setOnItemClickListener(new OnItemClickListener() { 

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

     } 
    }); 
Verwandte Themen