当前位置: 首页 > 知识库问答 >
问题:

Android GridView可点击图像视图

汪理
2023-03-14

我正在设计一个Gridview,其中每个项目都有一个TextView和ImageView。我试图找到关于如何使ImageView可点击以及GridView项目本身(两者都会触发不同的方法())的教程(逐步更新和清晰的教程)。

这就是我目前掌握的:

Activity.java

String[] newList;
for(int i=0; i < 6; i++ {
    newList[i] = "Item" + i;
}

GridView GV = (GridView) getActivity().findViewById(R.id.sexp_fav);
GV.setAdapter(new GVAdapter(getActivity(), newList)); // passing Activity and List data to adapter
GV.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView arg0, 
        View arg1, int position, long arg3) {

    }
});

GV适配器.java

public class GVAdapter extends BaseAdapter {

    private Context mContext;
    private LayoutInflater mInflator;

    String mEntries[];   
    public GVAdapter (Context context, String[] entries) {
        mContext = context;
        mInflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mEntries = entries; 
    }

    @Override
    public int getCount() {
        return mEntries.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            convertView = mInflator.inflate(R.layout.GVItemLayout, parent, false);
        }
        return convertView;
    }
}

结果:

-------------------------
                |       |
Item1           |Image1 |
                |       |
-------------------------
-------------------------
                |       |
Item2           |Image2 |
                |       |
-------------------------
...

当Item1(Textview)被点击时,它应该点击整个Item并触发GridView的OnItemClickListener,但是当Image1被点击时,它应该触发一个名为itemMethod(String itemName)的方法,对于这个方法,应该传递相应的Item名称,所以如果Image1被点击,它应该将“Item1”作为字符串传递给方法()。

任何帮助都将不胜感激。非常感谢。

共有2个答案

慕嘉茂
2023-03-14

您只需要在getview方法上添加一个click listener

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView image;
        if(convertView == null) {
            convertView = mInflator.inflate(R.layout.GVItemLayout, parent, false);
        }
       image= (ImageView) convertView.findViewById(R.id.image); 
       image.setOnClickListener(new OnClickListener() {
              public void onClick(View v) {
            // Call the method you need to call on ImageView click event
          }
       });
        return convertView;
    }
汪晨
2023-03-14

GVAdapter.java中创建一个静态类ViewHolder

public static class ViewHolder {
    public TextView myTextView;
    public ImageView myImageView;
    public FrameLayout myFrameLayout;
    public RelativeLayout myRelativeLayout;
 // whatever view
}

在您的getView(int,View,ViewGroup)中:

ViewHolder holder = null;

    if (convertView == null) {

        convertView = mInflater.inflate(R.layout.layout_for_each_grid_item, 
                                          parent, false);

        holder = new ViewHolder();
        holder.myTextView = (TextView) convertView
                .findViewById(R.id.myTextView);         
        holder.myImageView = (ImageView) convertView
                .findViewById(R.id.myImageView);            
        holder.myFrameLayout = (FrameLayout) convertView
                .findViewById(R.id.myFrameLayout);
        holder.myRelativeLayout = (RelativeLayout) convertView
                .findViewById(R.id.myRelativeLayout);           

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

final MyObject info = (MyObject) getItem(position);


// As per your requirement, we can set a `OnClickListener` to the ImageView here

holder.myImageView.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // Call the method you need to call on ImageView click event
        // Use reference to `info` if you want
    }
});

return convertView;
// Done

 类似资料:
  • 问题内容: 我现在正在寻找几天以寻求ListView中可点击项的解决方案。 首先,我遇到了这个问题: **developer.android.com/resources/articles/touch-mode.html** ,发现它没有“正常”的onListItemClick()行为。 然后我遇到了 这段代码 :http : //www.androidsnippets.org/snippets/1

  • 我有一个问题使我的图像可点击。它是一张推车风格的照片,带有一点数字气泡,告诉你在推车里有多少件物品。div是可点击的,但照片本身是不可点击的。 下面是我的代码: 我还尝试过用一个函数将click事件添加到图像中(“clicking”),我还尝试过将“routerlink='/cart'”添加到图像标记中,但这两种方法都不奏效。 我错过了什么? 提前谢谢!!

  • 嘿,对不起,我的英语不好。。。 我的 ListFragment 中有一个 ListView,带有自定义适配器。在我的布局中,我有一个按钮。按钮和整个项目/行是可单击的。我用为ImageButton实现了这一点。正如您在 getView() 方法中看到的,我捕获了一个单击操作。 这是我的布局: 现在我想知道你是否可以在不选择整个视图的情况下点击按钮,但仍然注意到背景上的点击(我知道我在列表视图中的位

  • 有没有办法将图像分割到区域(现在是JLabel,但如果需要我可以更改它)? 我在我的程序中使用swing,我有一个图像(这个例子是正方形),里面有一些三角形、星星和梯形(它可以是JPG、PNG等)。 这个想法是用户将点击这些形状中的一个,然后我将在用户点击的区域顶部放置另一个小图标。用户可以点击多个区域,但在一天结束时,我需要知道哪些形状被点击。

  • 正如标题所示,我正在尝试创建一个有几个按钮的程序,每个按钮在单击时都会显示一张图片。但是,我想知道,如果不使用此处所示的graphic类,也不使容器全球化,这是否可能。我尝试了这个,但是,我的程序似乎没有将图像添加到我的面板中。 代码如下:

  • 现在我的问题是如何使这个图像(在网格已经被强加)可点击。 [换句话说,应用网格后图像的各个子部分必须成为可点击的按钮]。