Android开发:将参数传递给onClickListener()

时间:2013-03-04 17:16:15

标签: java android onclicklistener

基本上我在for循环中创建按钮,我需要每个按钮在按下时返回不同的值。

我原本以为创建自己的onClickListener()并在初始化时将所需的数据作为参数传递将起作用。看来我没有提出语法错误但是在运行时单击按钮时应用程序崩溃。

这是我迄今为止所获得的简化版本。

int counter = 1;
for( Program element :  someList)
    {
    //some other code for dynamically creating textviews to stick the buttons in

    //code which creates the buttons on the fly
    moreInfo = new Button(this);
    moreInfo.setText("More Info");  
    moreInfo.setOnClickListener(new DynamicOnClickListener(counter));
    counter++;

    }

自定义侦听器类

import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class DynamicOnClickListener implements OnClickListener
{

    int counter;
    public DynamicOnClickListener(int acounter) {
         this.counter = acounter;
    }

    public void onClick(View v) {
        Log.v("DynamicOnClickListener","1");
        Toast.makeText(v.getContext(), counter, Toast.LENGTH_LONG).show();
    }

 }

所以从理论上讲,如果这个有效,每个按钮会返回不同的数字,希望这是有意义的。

2 个答案:

答案 0 :(得分:3)

Toast.makeText将字符串资源ID作为第二个参数。您的计数器值不是有效的资源ID,而是您收到错误的方式。您需要传递String而不是int才能使用。

Toast.makeText(v.getContext(), String.valueOf(counter), Toast.LENGTH_LONG).show();

答案 1 :(得分:1)

您可以使用setTag()

,而不是创建多个侦听器
moreInfo = new Button(this);
moreInfo.setText("More Info");
moreInfo.setTag(new Integer(counter));
moreInfo.setOnClickListener(new DynamicOnClickListener();

然后,在你的听众中

public void onClick(View v) {
    Log.v("DynamicOnClickListener","1");
    Toast.makeText(v.getContext(), ((Integer)v.getTag()).toString(), Toast.LENGTH_LONG).show();
}