首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何向OnClickListener传递参数?

如何向OnClickListener传递参数?
EN

Stack Overflow用户
提问于 2012-05-16 16:28:25
回答 6查看 90.5K关注 0票数 63

如何将参数传递给OnClickListener()?

找到我的听众了:

代码语言:javascript
复制
   OnClickListener myListener = new OnClickListener()
   {

     @Override
     public void onClick(View v)
     {
         //I want to reach params here

     }

  };

我有12个按钮,我不想为它们编写12个监听器,只需传递一个字符串给它们就好了,它们可以做完全不同的事情。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-16 16:31:57

使用您自己的自定义OnClickListener

代码语言:javascript
复制
public class MyLovelyOnClickListener implements OnClickListener
   {

     int myLovelyVariable;
     public MyLovelyOnClickListener(int myLovelyVariable) {
          this.myLovelyVariable = myLovelyVariable;
     }

     @Override
     public void onClick(View v)
     {
         //read your lovely variable
     }

  };
票数 159
EN

Stack Overflow用户

发布于 2014-05-20 21:52:40

我知道这是一个迟来的答案,但希望它能帮助一些人。现有的答案在我的情况下都不起作用,但我最终使用了一个像按钮一样运作的图像的setTag功能。我的帐户信息在全局成员变量中,该变量是在活动开始时设置的。

在本例中,我设置了一个表,其中每一行都是一个帐户。单击图像时会显示帐户详细信息(图像只是一个信息图标)。

因此:

代码语言:javascript
复制
// prior code....
// NOTE: oneAccount is an object (AccountInfo) holding information about the account

// column with the "detail" arrow
image1 = new ImageView(this);
image1.setImageResource(R.drawable.info);
image1.setLayoutParams(new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
image1.setPadding(15, 1, 15, 1);
image1.setTag(oneAccount);
// add a listener to go to that account detail on a click
image1.setOnClickListener(new TextView.OnClickListener() {
    public void onClick(View v) {
    // change the color to signify a click
    v.setBackgroundColor(getResources().getColor(R.color.button_selected));


    // get what we need out of the tag
    AccountInfo thisAcct = (AccountInfo) v.getTag();

        // your code would do other stuff here

}
});

// add the image to the table row
tr1.addView(image1);
票数 9
EN

Stack Overflow用户

发布于 2016-09-13 12:30:29

如果您有与视图相关联的静态内容,另一种选择是使用HashMap将视图id映射到内容。

代码语言:javascript
复制
private static Map<Integer, String> idToStringMap = new HashMap<Integer, String>();

onCreate中初始化地图

代码语言:javascript
复制
idToStringMap.put(R.id.button1, "hello");
idToStringMap.put(R.id.button2, "world");
// ...

然后从onClick中的视图id中获取值

代码语言:javascript
复制
public void onClick(View v) {

    String myString = idToStringMap.get(v.getId());
}

这比使用一长串开关用例要干净一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10614696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档