android 中onItemClickListener不起作用解決辦法

來源:互聯網
上載者:User

最近寫了一個項目,介面使用的是幀布局,裡面放置了listview顯示連絡人,以及右側有對連絡人的字母索引定位。結果在對連絡人listview設定onItemClickListener時,發現竟然不起作用。

下面的是布局檔案以及設定代碼

<FrameLayoutandroid:id="@+id/contact_fl"android:layout_width="match_parent"android:layout_height="match_parent" ><ListViewandroid:id="@+id/contact_lv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1.0"android:focusable="true"android:focusableInTouchMode="true"android:dividerHeight="1px"android:scrollbars="none" /> <LinearLayoutandroid:layout_width="28dp"android:layout_height="match_parent"android:layout_gravity="right|center"android:layout_marginBottom="6dp"android:layout_marginTop="10dp"android:gravity="right"android:orientation="vertical"><ListViewandroid:id="@+id/contact_letter"android:layout_width="28dp"android:layout_height="match_parent"android:layout_gravity="center_horizontal"android:focusable="true"android:focusableInTouchMode="true"android:scrollbars="none"/></LinearLayout></FrameLayout>

item布局檔案

View Code

<ImageViewandroid:scaleType="centerInside"android:layout_marginLeft="12dp"android:layout_marginTop="5dp"android:layout_marginRight="4dp"android:layout_marginBottom="3dp"android:layout_width="45dp"android:layout_height="45dp"android:src="@drawable/ic_contact_picture"android:id="@+id/contact_contactinfoitem_iv_photo"/> <TextView android:singleLine="true"android:ellipsize="marquee"android:textStyle="bold"android:marqueeRepeatLimit="marquee_forever"android:layout_height="wrap_content"android:layout_width="match_parent"android:layout_weight="1.0"android:id="@+id/contact_contactinfoitem_tv_name"android:text="xxx"/><TextView android:singleLine="true"android:ellipsize="marquee"android:textStyle="bold"android:marqueeRepeatLimit="marquee_forever"android:layout_height="wrap_content"android:layout_width="match_parent"android:layout_weight="1.0"android:id="@+id/contact_contactinfoitem_tv_phone"android:text="xxx"/>

在activity中設定onItemCllickListener

lv_contact.setOnItemClickListener(new OnItemClickListener(){ @Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id){Log.i("my", "onItemClick clicked"); } });

檢查發現onTouchListener裡面,返回結果是false,不是true,這意味著螢幕事件是繼續傳遞處理的,不會影響到onItemClickListener的處理。

 去網上查了下發現有說  xml中有個焦點屬性會影響onTouchListener,需要將其改為false

再次檢測xml檔案,裡面確實設定有這兩個屬性

android:focusable="true"android:focusableInTouchMode="true"

這兩個屬性的看名字就知道到意思,

android:focusable="true"-------

設定是否獲得焦點。若有requestFocus()被調用時,後者優先處理。注意在表單中想設定某一個如EditText擷取焦點,光設定這個是不行
的,需要將這個EditText前面的focusable都設定為false才行。在Touch模式下擷取焦點需要設定
focusableInTouchMode為true

android:focusableInTouchMode="true"----
 設定在Touch模式下View是否能取得焦點。
 在xml中修改,這屬性為false,運行工程,發現還是一樣的onItemCllickListener不起作用,這就糾結了。

 因為趕時間,乾脆在adapter中getView寫item的onclicklistener算了。代碼如下:

contact_fl.setOnClickListener(new OnClickListener(){ @Overridepublic void onClick(View view){Log.i("my", "onClick clicked"); } });

運行項目,item的點擊效果有了。但是同時有新的問題出現了。在我的ontouchListener種,onkeydown和onkeyup事件消失了。。。。
只有onkeymove。

經過分析得出結論,那就是肯定有方法或者屬性,設定的時候衝突了。
既然item的布局檔案中沒有button之類的空間。重點查看是否有方法或者屬性使得click事件消失了

再次到adapter中仔細檢查,發現有個兩個這樣的方法:

@Overridepublic boolean areAllItemsEnabled(){// all items are separatorreturn false;} @Overridepublic boolean isEnabled(int position){// all items are separatorreturn false;}

查看說明:

Returns true if the item at the specified position is not a separator. (A separator is a non-selectable, non-clickable item). The
result is unspecified if position is invalid. An ArrayIndexOutOfBoundsException should be thrown in that case for fast failure.

 意思就是說,如果當前指定的位置不是一個separator--分隔字元(分隔字元是一個不能選中,不能點擊的item),那麼返回true。

那麼趕緊改為true,運行項目,效果都有了。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.