2011-05-12 133 views
5

我有一个GridView与其中的自定义View,这是一个ButtonTextView。我定义了setOnItemClickListener,但它看起来好像从未调用过,请参阅下面的代码。GridView onItemClickListener永远不会被调用

gridview = (GridView) findViewById(R.id.main_gridview); 
gridview.setAdapter(new GridAdapter(this)); 

gridview.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
     Toast.makeText(getApplicationContext(), "gadsfadsf", 
      Toast.LENGTH_SHORT).show(); 
     Log.d("Main", "onItemClick"); 
    } 
}); 

回答

3

我有同样的问题。虽然我还没有弄清楚为什么它永远不会被调用,但我可以提出一种解决方法。

不是在GridView上设置onClickListener,而是在getAdapter()方法内的GridAdapter中的Button本身上进行设置。

这对我有效!

+0

是的,听起来像一个计划,谢谢。 – Eugene 2011-05-12 18:27:15

+1

是的,它的工作原理,但为什么触摸网格视图不工作,这个问题不带有listview为什么网格视图 – Bora 2013-08-07 04:37:40

1

改为让GridView设置onClickListener的,
设置在Button本身的GridAdapter里面,你getView()方法内。

这对我有效!

19

标记的答案是一种黑客。而不是设置一个onclicklistener到按钮的只是保证,该ButtonView和TextView的具有以下属性:

android:clickable="false" 
+0

这是解决方案。谢谢 – 2013-05-03 14:19:20

+7

也android:focusable =“false” – aalmeida 2013-09-24 03:46:14

+1

简单和最好的答案。 – himanshu 2014-05-26 11:42:33

1

我有同样的问题,该事件grid.itemClickListener从未启动。

在我的情况下,我有两个听众:grid.itemClickListener和另一个clickListener附加到项目的布局内的Button

在摆弄了一段时间的布局之后,我意识到如果在物品的布局中有一个小部件,使用focusable=true,那么itemClickListener从未启动。附于ButtonclickListener虽然运作良好。

也许这是你的情况。无论如何,我认为这些信息可能对遇到同样问题的其他用户有用。

1

感谢名单,以CodingUser

所以onItemClickListener发现它混淆访问项目我们在做什么,直接访问GridView控件内的布局。

因此,解决办法是应用onClickListener适配器(即通常ArrayAdapter)

所以什么IM想说的是里面:

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; 
} 
0

您可以设置的OnClick的观点在GridView中的适配器。它适合我。

public View getView(final int position, View convertView, ViewGroup parent) { 
    ObjMenuVideo objListVideo = mListMenuVideo.get(position); 
    final ViewHolder holder; 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     inflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.item_video_of_kind, null); 
     holder.tv_number_views = (TextView) convertView 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.tv_number_views.setText(String.valueOf(objListVideo.getViews())); 
    convertView.setId(position); 
    convertView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent menuVideoIntent = new Intent(mContext, 
        ActivityDetailVideo.class); 
      mContext.startActivity(menuVideoIntent); 
     } 
    }); 

    return convertView; 
} 
2

这可能是你的GridView中的某些项目正在窃取焦点。尝试将这些属性添加到网格中的任何元素:

android:focusable="false" 
android:focusableInTouchMode="false" 
+0

这是为我工作,你节省了我的时间 – Shailesh 2016-12-01 13:04:44

相关问题