2009-10-05 5 views
19

Я выполнил заказ ListView, расширив LinearLayout для каждой строки. Каждая строка имеет маленький эскиз, текст и check box. list view развернут правильно, и я могу прокручивать и пропускать его без проблем.setOnItemClickListener() не работает над пользовательским списком ListView @ Android

But The ListView, кажется, не реагировать на setOnItemClickListener() на всех, поэтому я должен был найти обходной путь, установив щелчка слушателя в getView() текста внутри каждой строки, которая, очевидно, создает проблемы, когда я пытаюсь повторно adapter. у кого-нибудь есть решение?

ответ

43

Попробуйте
Для ListView,

final ListView list = (ListView) findViewById(R.id.list); 
list.setItemsCanFocus(false); 

Кроме того, убедитесь, что для CheckBox внутри элемента списка установить фокусируемый ложные

android:focusable="false" 
android:focusableInTouchMode="false" 
+0

У меня та же проблема, указанное решение работает для обнаружения щелчков на строке, но у меня есть 2 кнопки в моей пользовательских ListView строке. Как я могу узнать, какую кнопку нажали? спасибо – longhairedsi

+0

спасибо !!! ты действительно помог мне !!! –

+1

@longhairedsi: добавьте следующий код в метод getView() button1.setFocusable (false); button2.setFocusable (false); button1.setFocusableInTouchMode (false); button2.setFocusableInTouchMode (false); button1.setOnClickListener (this); button2.setOnClickListener (this); реализовать свой клик-прослушиватель для кнопки в вашем адаптере (или там, где вы хотите ....) set listener для просмотра списка также ..... теперь проверьте, что ваш клик будет работать и для обоих ... listview как и для кнопок также –

0

Вы сделали какой-либо ViewHolder в своем расширенном классе адаптеров? Если да, то создайте экземпляр вашего этого заполнителя в setOnItemClickListener(), что-то будет работать так.

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) {   
     View rowView = v; 
     if (rowView == null) { 
      LayoutInflater inflater = this.getLayoutInflater(); 
       // GET INFLATE OF YOUR LAYOUT. 
      rowView = inflater.inflate(R.layout.projectpeopledescrate, null); 
      // CUSTOM ViewHolder Class Created in Adapter. 
// name,title,comment are my components on the same listview clicked item. 
      PPDViewHolder viewHolder = new PPDViewHolder(); 
      viewHolder.name  = (TextView) rowView.findViewById(R.id.ppeopledescrvname); 
      viewHolder.title = (TextView) rowView.findViewById(R.id.ppeopledescrvtime); 
      viewHolder.comment = (TextView) rowView.findViewById(R.id.ppeoplervcomment); 
      viewHolder.hiddenLayout = (RelativeLayout) rowView.findViewById(R.id.hiddenCommentPanel); 
      rowView.setTag(viewHolder); 
     } 
      // ANOTHER object instance to apply new changes. 
     PPDViewHolder holder = (PPDViewHolder) rowView.getTag(); 
// I've setted up visibility over the components. You can set your onClickListener over your buttons. 
     holder.comment.setVisibility(View.GONE); 
     holder.name.setVisibility(View.GONE); 
     holder.title.setVisibility(View.GONE); 
     holder.hiddenLayout.setVisibility(View.VISIBLE); 
     holder.hiddenLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.MATCH_PARENT)); 
     holder.hiddenLayout.bringToFront(); 

    } 

Надеюсь, вы хотите что-то такое же. Удачи!

11

старый ответ: я написал в previous post here

android:focusable="false" 
android:clickable="false" 

не поможет, когда ImageButton в настраиваемое представление .. Нужно использовать button.setFocusable(false); во время выполнения (из исходного кода Java)

Редактировать: Существует еще более элегантное решение. Попробуйте добавить android:descendantFocusability="blocksDescendants" в корневое расположение элемента списка. Это сделает щелчки onListItem можно и по отдельности и может обрабатывать кнопки или ImageButton щелкает

0

У меня есть этот код

this.mListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       Log.v(TAG,"loul"); 
      } 
     }); 

Но это не сработало

Так я Жюст поставил onItemSelectedListener под и работа Oo:

this.mListView.setItemsCanFocus(false); 
this.mListView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
     Log.v(TAG,"loul"); 
    } 
}); 
//listener for nothing but it allow OnItemClickListener to work 
this.mListView.setOnItemSelectedListener(new OnItemSelectedListener() { 

    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 

    } 
}); 
0

Установить эти свойства:

android:focusable="false" 
android:focusableInTouchMode="false" 

для всех элементов пользовательского интерфейса в вашем list_item.xml файл.

, если это не будет решено в вашем наборе адаптера:

v.imageView.setFocusable(false); 
    v.imageView.setFocusableInTouchMode(false); 
Смежные вопросы