2014-02-11 94 views
0

我真的搜索了很多谷歌,堆棧溢出,並發現這個:OnItemCLickListener not working in listview ANDROID。但似乎陽光的答案不適用於我的情況。其他答案都是類似的。爲什麼我的ListView永遠不會調用onItemClick?

我曾嘗試以下方法:

添加android:focusable="false"到我的列表項XML

在ViewHolder

使用XML作爲在上面的鏈接描述添加TextView.setFocusable(false)TextView.setClickable(false)

但他們都沒有工作。

這裏是我的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; 
    } 

編輯: 在我的活動:

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()方法上,您可以在返回之前設置convertView的onclick事件。 該事件處理程序可以被視爲onItemClick :)

+0

是的,我知道這一點。但是,當我也使用'listSelector'。我測試過,如果我爲textView設置了單擊偵聽器,那麼列表選擇器將不起作用。那麼我該怎麼做呢? – suitianshi

0

ListView中點擊收聽不能正常工作時,我們使用的按鈕,ImageButton的等。你只使用的TextView所以不會有問題,這樣的... 當你使用的LinearLayout無需在線性佈局中使用android:focusable="false"。 我們僅在使用按鈕期間使用此代碼。也不需要使用代碼holder.mTextView.setClickable(false); 由於文本不是一個按鈕,所以它不需要任何關注。當U點擊它會點擊列表單元格不上的TextView ... 如此簡單膨脹,再經過自定義適配器設置到ListView ... setonitemclicklistner列表視圖....

修訂ANSWER

convertView.setOnClickListener(new OnItemClickListener(position));

這肯定會起作用...

+0

謝謝。將有一個嘗試 – suitianshi

+0

我刪除了對'setClickable'和'android:focusable'的調用,但仍然沒有幫助 – suitianshi

+0

@suitianshi我已經更新了ans ...現在看到... –

相關問題