【问题标题】:Android Development: Passing a parameter into an onClickListener()Android 开发:将参数传递到 onClickListener()
【发布时间】:2013-07-22 18:14:13
【问题描述】:

基本上我是在 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();
    }

 }

所以理论上如果这可行,每个按钮都会返回一个不同的数字,希望这是有道理的。

【问题讨论】:

  • 它是如何崩溃的? (logcat)
  • 非常需要logcat :)

标签: java android onclicklistener


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多