5

我有一个GridViewwith custom View,它是 aButton和 a TextView。我定义了,setOnItemClickListener但看起来它从未被调用过,请参阅下面的代码和平。

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");
    }
});
4

7 回答 7

19

标记的答案是一种黑客攻击。与其为按钮设置 onclicklistener ,不如确保 ButtonView 和 TextView 具有以下属性:

android:clickable="false"
于 2012-03-04T16:46:42.583 回答
3

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

与其在 GridView 上设置 onClickListener,不如在 GridAdapter 内的 Button 本身上设置它,在 getView() 方法内。

这对我有用!

于 2011-05-12T18:23:01.347 回答
2

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

android:focusable="false"
android:focusableInTouchMode="false"
于 2016-02-29T13:43:02.787 回答
1

我遇到了同样的问题,该活动grid.itemClickListener从未启动。

在我的例子中,我有两个监听器:grid.itemClickListener另一个clickListener连接到Button项目布局中的 a 。

在摆弄了一段时间的布局之后,我意识到如果在项目的布局中有一个小部件,focusable=true那么itemClickListener就永远不会启动。clickListener附加到工作得Button很好。

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

于 2013-07-04T14:10:38.737 回答
1

与其onClickListener在 yourGridView上设置,不如在您的方法内部的自身
上设置它。ButtonGridAdaptergetView()

这对我有用!

于 2011-09-24T09:31:14.443 回答
1

感谢 CodingUser

我们所做的是直接访问 GridView 内的 Layout,因此 onItemClickListener 发现访问项目很混乱。

所以解决方案是在Adapter内部应用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;
}
于 2014-01-22T11:37:10.387 回答
0

您可以在 GridView 的适配器中设置 OnClick 以查看视图。它对我有用。

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;
}
于 2015-06-30T02:59:38.220 回答