Android GridView按钮单击处理程序

use*_*963 4 android android-gridview

我有一个Android GridView有一个ImageView,TextView两个Button's.网格看起来很好,但我发现很难处理内部的按钮事件GridView.我是Android新手.

任何帮助,将不胜感激.

谢谢.

Sam*_*Sam 11

如果您希望按钮(以及其他任何内容)在布局中具有唯一的单击操作,则需要编写自定义适配器并覆盖getView():

public MyAdapter(Context context, List<T> objects) {
    ...
    inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView == null) {
        // Inflate and initialize your layout
        convertView = inflater.inflate(R.layout.grid_item, parent, false);
        holder = new ViewHolder();
        holder.btnOne = (Button) convertView.findViewById(R.id.btnOne);
        holder.btnOne.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do something
            }
        });
        // etc, etc...
        convertView.setTag(holder);
    }
    else
        holder = (ViewHolder) convertView.getTag();

    // Do things that change for every grid item here, like
    holder.textOne.setText(getItem(position));          
    return convertView;
}


class ViewHolder {
    Button btnOne;
    TextView textOne;
}
Run Code Online (Sandbox Code Playgroud)

这个概念在多年来的Google会谈中得到了很好的解释,这里有一个.


加成

我试图在单击GridView内的按钮时在GridView列中设置TextView的文本.

您应该能够onClick()通过询问View的父级然后获取ViewHolder 来访问方法中布局中的任何View :

public void onClick(View v) {
    ViewHolder holder = (ViewHolder) ((View) v.getParent()).getTag();
    // Do something with holder.textOne now
}
Run Code Online (Sandbox Code Playgroud)

(这假设您的布局没有任何嵌套的ViewGroups,因此请相应调整.)


小智 0

您必须使用 onItemClickListener

 gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, 
                long row) {
 }
Run Code Online (Sandbox Code Playgroud)

位置应该告诉您有关单击的元素的信息。但我认为 gridview 在处理带有点击监听器的对象(如按钮)时存在问题。也许最好更改其他容器的 gridview 。如果您需要 gridview,您可以使用 setOnTouchListener 捕获屏幕中的位置并创建手动 onitemclicklistener。