Android GridView ItemClikListneter问题

时间:2012-06-21 10:17:07

标签: android gridview onitemclicklistener

我使用item.xml创建了一个GridView,其中包含LinearLayout内的图片。

Gridview代码:

<GridView
            android:id="@+id/gridView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clickable="true"
            android:columnWidth="150dip"
            android:gravity="center"
            android:horizontalSpacing="10dip"
            android:numColumns="auto_fit"
            android:stretchMode="columnWidth"
            android:verticalSpacing="15dip" >
        </GridView>

item.xml代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/itemLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/selector"
android:clickable="true"
android:gravity="center_horizontal"
android:orientation="vertical" >

<ImageView
    android:id="@+id/itemIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:scaleType="matrix"
    >
</ImageView>   

然后我为LinearLayout背景添加了selector.xml,以避免在点击项目时显示所选区域。

selector.xml代码:

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@android:color/transparent" android:state_enabled="true" android:state_pressed="true"/>
<item android:drawable="@android:color/transparent" android:state_enabled="true" android:state_focused="true"/>
<item android:drawable="@android:color/transparent" android:state_enabled="true"/>

android:clickable="true"添加到item.xml LinearLayout后,GridView ItemClickListner无法正常工作。否则它会起作用,但不会将{/ 2}效果应用于{{ 1}}。我想对LinearLayout应用selector.xml效果,并且也会LinearLayout工作。

请帮我解决这个问题。谢谢。

2 个答案:

答案 0 :(得分:0)

只需将属性android:focussable=false添加到item.xml中的ImageView即可。这应该可以解决问题。

<ImageView
    android:id="@+id/itemIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:focussable=false
    android:scaleType="matrix"
    >
</ImageView> 

由于您为此ImageView分配了可单击的True,因此它默认获得焦点,因此不允许单击您的GridView项目。因此将其设置为不可聚焦状态将帮助您实现两个点击事件。

答案 1 :(得分:0)

删除android:clickable =&#34; true&#34;从 item.xml 布局的线性布局和图像视图,并在imageview中添加这三个参数

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

之后使用类似此参数的内容在drawable background.xml 中创建一个xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_focused="true" android:drawable="@color/focusedcolor"
   <item android:state_pressed="true" android:drawable="@color/selectedcolor" />
   <item android:drawable="@color/normalcolor" />
</selector>

之后,在线性布局中添加 item.xml

  android:background="@drawable/background"

在我的代码中,文件夹中的 colors.xml 类似于

 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 <color name="focusedcolor">#b6c4c5</color>
 <color name="selectedcolor">#ff33ffff</color>
 <color name="normalcolor">#f7ff1f</color>
 </resources>

而不是颜色你也可以使用drawable文件夹中的图像,如果你想要成像,而不是 background.xml ,你必须改变

 android:drawable="@color/focusedcolor" line by 

 android:drawable="@drawable/imagename"