【发布时间】:2016-12-01 18:39:38
【问题描述】:
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"/>
Java 代码如下:
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");
}
});
只有 onNothingSelected() 在应用启动后被调用一次。当使用遥控器更改 GridView 上的焦点或单击任何项目时,不会调用任何其他侦听器。
任何人都可以提供有关如何使听众工作的提示吗?
GridView 的其他所有内容都按预期工作。
编辑:以下是每个网格单元格的布局:
<?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 的the tip,出于测试目的,我从自定义项目视图布局中删除了 ImageButton,并且 OnItemSelectedListener 开始正常工作。因此罪魁祸首是ImageButton。似乎任何可点击的对象都会破坏 OnItemSelectedListener。
编辑(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 没有 setOnItemClickedListener。没有 AdapterView.onItemSelectedListener。
-
GridView没有onItemClickListener()? API会被愚弄吗? developer.android.com/guide/topics/ui/layout/gridview.html
-
你在使用任何第三方的gridview吗?
-
对不起,我错了。 Android Studio IntelliSense 出现问题。我可能太依赖它了。你说得对,GridView 有 setOnClickListener。不幸的是,它不适用于带有触摸屏的桌子或带有遥控器的 Android TV。
标签: android android-gridview android-adapterview