OnItemClickListener在Android GridView上未触发

我有一个适配器填充的GridView,返回LinearLayouts每个包含一个ImageButton和TextView。

在适配器中,我将一个onClick和onLongClick事件绑定到ImageButton。

我想绑定OnItemClickListener到gridview,但我不知道为什么onItemclicked从来没有启动。

这是我第六个小时没有任何东西。

顺便一提; OnItemSelectListener在网格上完美工作。

我正在检查一些代码是否意外地处理了onItemClicked,但还没有赶上。

我需要帮助的人

gridView = (GridView) layoutInflater.inflate(R.layout.gridview, null); gridView.setOnItemClickListener(new ItemClickListener()); . . . //inner handler class class ItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(mainActivity.getApplicationContext(),view + " clicked at pos " + i,Toast.LENGTH_SHORT).show(); } } 

Solutions Collecting From Web of "OnItemClickListener在Android GridView上未触发"

不要在网格中使用可点击的对象。 在这种情况下,Android无法处理GridView的点击事件。

相反,使用某些东西来显示类似的用户界面视图。 然后处理该对象的点击操作。

不要:Button放在GridView来执行一些点击操作。

做:把一个ImageView而不是ImageButton并处理ImageView的点击事件。

如果你想使用ButtonImageButton那么你需要在这些小部件的xml代码中编写这些属性。

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

它的作品给我。

但是在GridView中,尽量避免使用这些小部件。 您可以使用任何其他小部件代替这些(像ImageView或任何其他)。

还要确保你的ListAdpter返回true

public boolean isEnabled(int _position)

为您想要点击的位置。

嘿guyz终于得到了一个解决scheme…

我们正在做的是直接访问GridView中的布局,所以onItemClickListener发现它混淆访问该项目。

所以解决scheme是适用于适配器内的onClickListener(即通常ArrayAdapter)

所以我试图说的是:

 public View getView(int position, View convertView, ViewGroup parent) { //Here row is a view and we can set OnClickListener on this final View row; ViewHolder holder = null; if (convertView == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); //Here we inflate the layout to view (linear in my case) row = inflater.inflate(layoutResourceId, parent, false); holder = new ViewHolder(); holder.imageTitle = (TextView) row.findViewById(R.id.text); holder.image = (ImageView) row.findViewById(R.id.image); row.setTag(holder); } else { row = convertView; holder = (ViewHolder) row.getTag(); } ImageItem item = data.get(position); holder.imageTitle.setText(item.getTitle()); holder.image.setImageBitmap(item.getImage()); //Now get the id or whatever needed row.setId(position); // Now set the onClickListener row.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(context, "Clicked" + row.getId() + "!!", Toast.LENGTH_SHORT).show(); } }); return row; } 

伟大的解决scheme在这里,但没有固定的我。 所以我想分享这个帮助我的答案。

https://stackoverflow.com/a/19303427/577269

尝试设置

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

我也遇到同样的问题,因为几个原因。 所以,这是我的提示:

  1. 为适配器扩展BaseAdapter ;
  2. 在getView in适配器中使用OnClickListener ,而不是为GridView设置OnItemClickListener ;
  3. 避免多次设置LayoutParams ;
  4. 检查position = 0,不要使用convertView,膨胀新的View ;
  5. 设置OnClickListener不仅为父视图 ,但任何子视图 ,如果有的话;
  6. 让所有的视图点击。

我只是在4个设备上进行了testing,这个解决scheme按预期工作。 希望,这将有助于你的情况。 纠正我,如果我做错了。

布局代码XML:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="100dp" android:background="#273238" android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" android:padding="1dp"> <ImageView android:id="@+id/open_image_item_imageview" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/loh" android:clickable="true" android:focusable="false" android:focusableInTouchMode="false" android:scaleType="centerCrop"/> <TextView android:id="@+id/open_image_item_textview" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" android:focusable="false" android:focusableInTouchMode="false" android:layout_gravity="bottom" android:padding="4dp" android:textSize="10sp" android:ellipsize="start" android:background="#55000000" android:textColor="#FFFFFF" android:text="image name"/> </FrameLayout> 

适配器代码Java:

  @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = null; if(convertView != null && position != 0) view = convertView; else{ view = LayoutInflater.from(getContext()).inflate(R.layout.open_image_item_layout, null, false); view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, size)); } TextView textView = (TextView)view.findViewById(R.id.open_image_item_textview); ImageView imageView = (ImageView)view.findViewById(R.id.open_image_item_imageview); ... View.OnClickListener onClickListener = getOnClickListener(files[position]); view.setOnClickListener(onClickListener); textView.setOnClickListener(onClickListener); imageView.setOnClickListener(onClickListener); return view; }