2 zxd 72 zxd_72 于 2013.03.05 11:36 提问

给 ImageButtons 添加 OnClickListeners 事件

我想用编程的方式动态的创建 ImageButtons,然后添加到 Scrolling LinearLayout 中。
我能把 ImageButtons 添加到布局中,但是当我想给按钮添加 onClickListeners 事件时,所有的 view ID 是 -1,因此无法找到哪个按钮被点击。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        OnClickListener imageClickListener;
        imageClickListener = new OnClickListener(){

            @Override
            public void onClick(View v) {
                System.out.println("id clicked: " + v.getId());             
            }
        };

        for (int i = 0; i<images.length; i++)
        {
            LinearLayout il = new LinearLayout(this);
            il.setOrientation(LinearLayout.HORIZONTAL);
            il.setMinimumHeight(LayoutParams.WRAP_CONTENT);
            il.setMinimumWidth(LayoutParams.WRAP_CONTENT);

            int imageid = 0;
            ImageButton ib;
            BitmapDrawable imagebd;
            imageid = getResources().getIdentifier("drawable/" + images[i], null, getPackageName());
            imagebd = resizeImage(imageid);
            ib = new ImageButton(this);
            ib.setClickable(true);
            ib.setOnClickListener(imageClickListener);
            ib.setImageDrawable(imagebd);
            ib.setMinimumHeight(size);
            ib.setMinimumWidth(size);       
            ib.setMaxHeight(size);
            ib.setMaxWidth(size);
            imageButtons.add(ib);
            il.addView(ib);
            System.out.println("id: " + ib.getId());

            ll.addView(il);
        }
        this.setContentView(sv);
    }

2个回答

easonx1990
easonx1990   2013.03.06 17:25
已采纳

可以用ib.setTag()来解决。
在onClick(View v)中,调用v.getTag作为判断。

O_Casper_ne
O_Casper_ne   2013.03.05 14:41

调用 ib.setId(i)
如果你想要一个 id,当你创建 image button 时必须定义它。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
js添加事件
js添加事件,给某一个html元素添加事件。
如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件
如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件如何使用VC++ 2005 给ActiveX控件添加方法,属性,事件
添加事件
给元素添加事件
Android的按钮监听事件&自定义回调函数
Android的按钮监听事件&自定义回调函数
JS给元素添加事件
给页面的某个元素添加某个事件是前端开发经常遇到的事, 这里就演示利用原始的 JS 动态给页面某个元素添加事件, 兼容MS IE 和 非MSIE 的浏览器情况: 1, JS给元素动态添加事件的通用函数 function attachEvt(evt,refEventName,refObjID,refFunctionName){ //how use: attachEvt(event,'cli
JavaScript给控件添加事件的方法
在javascirpt中给控件添加事件的方法有3中,下面我们来列举一下: 1. 其中onclick="click();"的click()方法,就是要调用的按钮要调用的方法。 这是最简单也是最直接的一种方法,不过一般程序中很少用。 2. //javaScript代码 var v=document.getElementById("b
如何给动态元素添加事件
如何给动态元素添加事件 要给动态添加的元素添加事件,可以给其父元素添加事件。这样若是在冒泡事件下,点击事件由子元素传递到父元素,就会触发父元素上绑定的事件函数,在函数里做一下过滤,便可实现想要的功能。(在捕获事件里也是同样的道理) 以下分三种事件举例。JavaScript事件有HEML事件、DOM0级事件和DOM2级事件。 1.      HEML事件: 如示例所示,当点击“添加”按钮添加
VC2010给ActiveX添加事件
VC2010如何给ActiveX添加事件方法
JS 给多个对象添加事件
JS 给多个对象添加事件,js给多个<p>添加事件
用JS 对对象添加事件
第一种情况: IE7和FIRFOX有效 var td = document.getElementById("td"); td.onclick = function test() { alert(''); } var func_name= function (){showinfo()}; var href=document.getElementById("a"); href.oncl