Android GridView点击未被检测到

我有以下的GridView LinearLayout

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <GridView android:id="@+id/songs_grid" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:columnWidth="250dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" /> </LinearLayout> 

GridView数据由一个自定义适配器提供(使用一个简单的ViewHolder ):

 public class SongsAdapter extends BaseAdapter { private Context context; private LayoutInflater mInflater; private ArrayList<Song> songList; public SongsAdapter(Context context, ArrayList<Song> songList) { this.context = context; this.songList = songList; mInflater = LayoutInflater.from(this.context); } @Override public int getCount() { return songList.size(); } public Object getItem(int position) { return songList.get(position); } public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { SongViewHolder viewHolder; if (convertView == null) { convertView = mInflater.inflate(R.layout.song_list_item, null); viewHolder = new SongViewHolder(); //Get Views from Layout Template viewHolder.AlbumArt = (ImageView)convertView.findViewById(R.id.albumart); viewHolder.Title = (TextView)convertView.findViewById(R.id.title); viewHolder.Artist = (TextView)convertView.findViewById(R.id.artist); } else { viewHolder = (SongViewHolder) convertView.getTag(); } Song song = songList.get(position); Bitmap bitmap = song.getAlbumArt(); Bitmap missing = BitmapFactory.decodeResource(context.getResources(), R.drawable.albumart_missing); Bitmap albumArt = bitmap == null ? missing : bitmap; viewHolder.AlbumArt.setImageBitmap(albumArt); viewHolder.Title.setText(song.getTitle()); viewHolder.Artist.setText(song.getArtist()); convertView.setTag(viewHolder); return convertView; } } 

当应用程序启动时,获取歌曲列表(从XML,但目前使用手动input列表),并将其传递给我的适配器,然后设置OnItemClickListener

 GridView gridView = (GridView) findViewById(R.id.songs_grid); gridView.setAdapter(new SongsAdapter(this, fk.getSongList())); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { LinearLayout layout = (LinearLayout)view; TextView songTitle = (TextView)layout.findViewById(R.id.song_title); Song song = fk.getSong((String) songTitle.getText()); if(song != null) { Intent play = new Intent(getBaseContext(), Play.class); startActivity(play); } } }); 

当我第一次实现这个代码时,它一切正常,我相信我没有改变任何东西。 我试图让歌曲标题滚动字幕,如果它太长,但不能得到它的工作。 在这个阶段,我发现点击停止工作。 我现在已经删除(我相信)所有的代码,但仍然失败。

当我触摸/点击(不pipe你怎么称呼它)什么都不会发生。 没有错误没有。

我的代码有什么问题会导致这个问题?

Solutions Collecting From Web of "Android GridView点击未被检测到"

检查您的项目布局。 如果任何一个song_list_item布局视图被标记为可点击,他们将阻止网格的onclick监听器响应。

确保GridView中的clickable属性不会覆盖视图中项目的点击事件。

我遇到了这个问题,解决scheme类似于dmon的答案。 如果项目的其中一个孩子是可select的,它也可以防止项目被点击。 所以如果android:textIsSelectable是真的。

如果你使所有的图像视图和文本视图android:focusable =“false”android:focusableInTouchMode =“false”

在gridview项目点击侦听器中不会有任何问题

添加到你的单元格xml

 android:descendantFocusability="blocksDescendants"