2014-02-11 3 views
0

Я действительно много искал в google, переполнении стека и нашел это: OnItemCLickListener not working in listview ANDROID. Но, похоже, ответ на солнечный свет не работает для моего дела. Другие ответы - все похожие.Почему мой ListView никогда не вызывает onItemClick?

Я попытался следующие подходы:

добавить android:focusable="false" в мой список элемента XML

добавить TextView.setFocusable(false) и TextView.setClickable(false) в ViewHolder

с использованием XML, как описано в приведенной выше ссылке.

Но никто из них не работает.

Вот мой XML и Java-код:

list_item.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="wrap_content" 
android:baselineAligned="false" 
android:descendantFocusability="blocksDescendants" 
android:focusable="false" 
android:paddingTop="2dp" 
android:gravity="center_vertical" > 

<TextView 
    android:id="@+id/ninegrid_number_list_choice" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textSize="@dimen/ninegrid_number_listchoice_text_size" 
    android:gravity="center" 
    > 
</TextView> 
</LinearLayout> 

getView список INT adapter.java:

@Override 
    public View getView(int position, View convertView, final ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list_item, null); 
      holder = new ViewHolder(); 
      holder.mTextView = (TextView)convertView.findViewById(R.id.ninegrid_number_list_choice); 
      holder.mTextView.setFocusable(false); 
      holder.mTextView.setClickable(false); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder)convertView.getTag(); 
     } 

     holder.mTextView.setText(mList.get(position)); 
     holder.mTextView.setTextColor(mTextColor); 
     holder.mTextView.setFocusable(false); 
     holder.mTextView.setClickable(false); 
     return convertView; 
    } 

Edit: в моей деятельности:

listchoice.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); 
listChoice.setOnItemClickListener(new OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
    long arg3) { 

     Log.v(tag, "sdf"); 
} 
}); 
+1

Вы не показываете нам код, где вы регистрируетесь слушателя onItemClick. Вы правильно регистрируете слушателя? –

+0

где вы устанавливаете onItemClickListener(), покажите этот код! –

+0

см. Мое редактирование, пожалуйста. – suitianshi

ответ

0

По методу getView() адаптера вы можете установить событие onclick convertView перед его возвратом. Этот обработчик события можно рассматривать как onItemClick :)

+0

Да, я знаю это. Но пока я использую 'listSelector'. Я тестировал, что если я установлю clickener для textView, селектор списков не будет работать. Так что же мне делать? – suitianshi

0

элемент управления ListView нажмите слушатель не работает, когда мы используем кнопки, ImageButton и т.д. Как вы используете только TextView, так что не будет проблемой, как ... Как вы использовали LinearLayout не нужно использовать android:focusable="false" в вашей линейной компоновке. Мы использовали этот код только при использовании кнопок. Также нет необходимости использовать код holder.mTextView.setClickable(false); Поскольку текст не является кнопкой, поэтому он не фокусируется. Когда у клики будет щелкнуть на ячейке списка не на TextView ... Так просто надуть, а затем после установки пользовательского адаптера к ListView ... setonitemclicklistner к просмотру списка ....

ОБНОВЛЕНО ОТВЕТ

convertView.setOnClickListener (новый OnItemClickListener (позиция));

Это, безусловно, работает ...

+0

спасибо. у вас будет попытка – suitianshi

+0

я удалил вызов 'setClickable' и' android: focusable', но до сих пор не помогает – suitianshi

+0

@suitianshi Я обновил ans ... Теперь посмотрим, что ... –

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