15

Я хочу иметь OnItemClickListener для ListView я создаю с помощью 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?

Спасибо!

EDIT: Я использую в своем ArrayAdapter и ListView строку объектов.

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

    } 

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

вы можете вызвать метод 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. Первым параметром является адаптер. Второй параметр - это вид. Третьим параметром является позиция (индекс элементов списка).

Используя позицию, вы получаете товар.

Edit: Из ваших комментариев я предполагаю, что вы необходимы установить адаптер O ListView

Так предполагается, что ваша активность распространяется 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

Хорошо, после того, как информация о том, что ваша активность расширяет 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

Ваша деятельность расширяет ListActivity? – Heisnberg

+0

Да, да! Куда мне идти оттуда? –

1

я использую arrayadpter, используя этот код follwed я в состоянии получить пункты

Строковое значение = (String) 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); 

     } 
    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^