15

Chcę mieć OnItemClickListener dla ListView tworzę przy użyciu ArrayAdapterOnItemClickListener użyciu ArrayAdapter dla ListView

Jest to kod używam go utworzyć:

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

Jak zaimplementować onItemClickListener?

Dzięki!

EDYCJA: używam w moim ArrayAdapter i ListView ciąg obiektów.

EDIT 2: Więcej kod:

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

można wywołać metodę setonItemClickListner dla tego .. – Piyush

+0

@ piyush- Czy możesz mi powiedzieć, jak? Jak utworzyć metodę, która łączy go z ArrayAdapter podanym powyżej? –

Odpowiedz

54

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

Po kliknięciu na wiersz zostaje uruchomiony detektor. Więc jesteś setOnClickListener na liście i użyj annonimowej klasy wewnętrznej OnItemClickListener.

Nadpisujesz także onItemClick. Pierwszym parametrem jest adapter. Drugim parametrem jest widok. Trzeci parametr to pozycja (indeks elementów listview).

Korzystanie z pozycji otrzymasz przedmiot.

Edit: Z twoich komentarzach Zakładam, że trzeba ustawić ListView sieciowy O

Więc zakładając swoją działalność rozciąga ListActivtiy

 setListAdapter(adapter); 

Lub, jeśli klasa aktywność rozciąga aktywność

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

Nie jestem zdezorientowany, w jaki sposób ta metoda jest połączona z powyższym adapterem macierzy? Na pewno nie mogę po prostu skopiować tego i oczekiwać, że zadziała. Jestem względnie początkującym, więc proszę wyjaśnij trochę więcej. Dzięki. –

+0

"// zakładając ciąg znaków i jeśli chcesz uzyskać wartość na kliknięciu elementu listy" Zakładam, że tutaj jest miejsce, gdzie wpisuję kod, który robi coś, gdy kliknięto element? –

+0

@AhmedZafar możesz zrobić to, co masz zamiar zrobić, zamiast zdobyć przedmiot po kliknięciu w wiersz. dokładnie – Raghunandan

6

można używać w ten sposób ...

listView.setOnItemClickListener(new OnItemClickListener() { 

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

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

Nie rozumiem, w jaki sposób ta metoda wie, że jest ona powiązana z powyższym ArrayAdapter? –

+0

oznacza, że ​​chcesz uzyskać wartość z adaptera ?? – Piyush

+0

Mam listę, która jest wyświetlana, przechowuj w ArrayAdapter. Kiedy klikam element na liście, chcę, żeby coś zrobił. Zadzwoń pod numer, aby być konkretnym. Jak mogę użyć tej metody, aby to zrobić? ListView nie jest czymś, co określiłem w swoim kodzie, czy możesz mi powiedzieć więcej o tym, jak działa ta funkcja i jak jej użyję. Jestem zdezorientowany. –

2

Ok, po informacji, że twoja działalność rozszerza ListActivity tutaj jest sposobem na wdrożenie 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

Zaktualizowałem to, co uważam za istotne! –

+0

Czy Twoja działalność rozszerza ListActivity? – Heisnberg

+0

Tak, to prawda! Gdzie odejdę? –

1

używam arrayadpter, używając tego kodu follwed Jestem w stanie uzyskać przedmioty

wartość String = (String) adapter.getItemAtPosition (pozycja);

listView.setOnItemClickListener(new OnItemClickListener() { 

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

     } 
    });