Android setOnItemSelectedListener和setOnClickListener都不适用于GridView

Android setOnItemSelectedListener和setOnClickListener都不适用于GridView,android,android-gridview,android-adapterview,Android,Android Gridview,Android Adapterview,GridView如下所示: <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_margin="0dp" android:horizontalSpacing="0dp" android:numColumns="2" android:stretc

GridView如下所示:

<GridView
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="0dp"
    android:horizontalSpacing="0dp"
    android:numColumns="2"
    android:stretchMode="columnWidth"
    android:verticalSpacing="0dp"
    android:fadeScrollbars="false"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:descendantFocusability="afterDescendants"/>
gridview = (GridView) findViewById(R.id.gridview);
gridview.setNumColumns(iColumnCount);
gridview.setAdapter(dta);
gridview.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int iPosition, long l) {
        utility.logd("gridview", "selected item position:" + iPosition);
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {
        utility.logd("gridview", "nothing selected.");
    }
});
gridview.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        utility.logd("gridview", "item clicked");
    }
});

Java代码如下所示:

<GridView
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="0dp"
    android:horizontalSpacing="0dp"
    android:numColumns="2"
    android:stretchMode="columnWidth"
    android:verticalSpacing="0dp"
    android:fadeScrollbars="false"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:descendantFocusability="afterDescendants"/>
gridview = (GridView) findViewById(R.id.gridview);
gridview.setNumColumns(iColumnCount);
gridview.setAdapter(dta);
gridview.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int iPosition, long l) {
        utility.logd("gridview", "selected item position:" + iPosition);
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {
        utility.logd("gridview", "nothing selected.");
    }
});
gridview.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        utility.logd("gridview", "item clicked");
    }
});
gridview=(gridview)findViewById(R.id.gridview);
setNumColumns(iColumnCount);
setAdapter(dta);
gridview.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView AdapterView、View-View、int-iPosition、长l){
logd(“gridview”,“所选项目位置:+iPosition”);
}
@凌驾
未选择公共无效(AdapterView AdapterView){
logd(“gridview”,“未选择任何内容”);
}
});
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图){
logd(“gridview”,“单击项”);
}
});
应用程序启动后,仅调用onNothingSelected()一次。当使用遥控器更改GridView上的焦点或单击任何项目时,不会调用任何其他侦听器

有人能提供一个如何让听众工作的提示吗?
GirdView的其他所有功能都按预期工作

编辑:以下是每个网格单元的布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="0dp"
    android:layout_gravity="center"
    android:id="@+id/biyee_relativeLayoutRoot">

    <ImageButton
        android:id="@+id/imageButton"
        android:background="@drawable/button_background"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="snapshot"
        android:layout_gravity="center"
        android:scaleType="fitXY"
        android:adjustViewBounds="true"
        android:layout_margin="0dp"
        android:padding="10dp"
        android:src="@drawable/ic_launcher"
        android:onClick="onClick_imageButton"/>

    <LinearLayout
        android:id="@+id/linearLayoutCaption"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/black_overlay"
        android:orientation="vertical"
        android:layout_margin="10dp"
        android:padding="5dp">

        <TextView
            android:id="@+id/textViewName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:text="Name"
            android:textAppearance="?android:attr/textAppearanceSmall" />

        <TextView
            android:id="@+id/textViewModel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Model"
            android:textAppearance="?android:attr/textAppearanceSmall"/>

        <TextView
            android:id="@+id/textViewTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:text="Time"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    </LinearLayout>

    <TextView
        android:id="@+id/textViewPosition"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:text="n"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:layout_margin="15dp"/>

</FrameLayout>

编辑(2): 根据Daniel Nugent的介绍,为了进行测试,我从自定义项目视图布局中删除了ImageButton,OnItemSelectedListener开始完美工作。因此,罪魁祸首是巴顿。似乎任何可单击的对象都会破坏MSelectedListener

编辑(3):为了测试,我对自定义项目视图使用了以下布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:orientation="vertical"
    android:background="@color/red">

</LinearLayout>


OnItemSelectedListener工作正常,但无论我是使用鼠标还是遥控器单击项目,都不会调用OnClickListener和OnItemClickListener。

尝试使用
OnItemClickListener
而不是
OnItemSelectedListener

gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                //Your Logic here
        }
);
gridview.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
//你的逻辑在这里
}
);
onItemSelectedListener
将在您实现某种选择(如箭头或其他东西)的情况下执行此操作

调用此视图中的项时要调用的回调方法 已选择。仅当新选择的 位置与先前选择的位置不同,或者 没有选定的项目

如果需要,推动器可以调用getItemAtPosition(position) 访问与所选项目关联的数据


尝试使用
OnItemClickListener
而不是
onItemSelectedListener

gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                //Your Logic here
        }
);
gridview.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、,
//你的逻辑在这里
}
);
onItemSelectedListener
将在您实现某种选择(如箭头或其他东西)的情况下执行此操作

调用此视图中的项时要调用的回调方法 已选择。仅当新选择的 位置与先前选择的位置不同,或者 没有选定的项目

如果需要,推动器可以调用getItemAtPosition(position) 访问与所选项目关联的数据



我想您需要
onItemClickListener()
而不是
onItemSelectedListener()
不幸的是,GridView没有setOnItemClickedListener。没有AdapterView.onItemSelectedListener.GridView没有onItemClickListener()?API被愚弄了吗?你使用的是第三方gridview吗?对不起,我错了。Android Studio IntelliSense出了问题。我可能太依赖它了。你是对的,gridview有setOnClickListener。不幸的是,它既不适用于带触摸屏的桌子,也不适用于带遥控器的Android电视。我猜您需要
onItemClickListener()
而不是
onItemSelectedListener()
很遗憾,GridView没有setOnItemClickedListener。没有AdapterView.onItemSelectedListener.GridView没有onItemClickListener()?API被愚弄了吗?你使用的是第三方gridview吗?对不起,我错了。Android Studio IntelliSense出现问题。我可能太依赖它了。你是对的,gridview有setOnClickListener。不幸的是,它既不适用于带触摸屏的桌子,也不适用于带遥控器的Android电视。谢谢你您可以帮忙。GridView没有setOnItemClickedListener。没有AdapterView.onItemSelectedListener。我希望在焦点从一个项目移动到另一个项目时调用侦听器。@Hong than您确定您确实在选择另一个项目吗?@Hong GridView确实有OnItemClickedListener签出此示例:谢谢。所以rry,我错了。Android Studio IntelliSense出现了问题。我可能太依赖它了。你是对的,GridView有setOnClickListener。不幸的是,它既不适用于带触摸屏的桌子,也不适用于带遥控器的安卓电视。@Hong加入聊天室,避免在这里发表太多评论感谢您的帮助。GridView没有setOnItemClickedListener。没有AdapterView.onItemSelectedListener。我希望在焦点从一个项目移动到另一个项目时调用侦听器。@Hong than您确定您确实在选择另一个项目吗?@Hong GridView确实有OnItemClickedListener签出此示例:谢谢你。对不起,我错了。Android Studio IntelliSense出现问题。我可能太依赖它了。GridView有setOnClickListener,你是对的。不幸的是,它不适用于具有