android按钮参数,android-如何将参数传递给OnClickListener?

android-如何将参数传递给OnClickListener?

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

得到了我的听众:

OnClickListener myListener = new OnClickListener()

{

@Override

public void onClick(View v)

{

//I want to reach params here

}

};

我有12个按钮,但我不想为它们编写12个侦听器,将一个字符串传递给它们会很棒,它们可以完成完全不同的事情。

8个解决方案

152 votes

使用您自己的自定义OnClickListener

public class MyLovelyOnClickListener implements OnClickListener

{

int myLovelyVariable;

public MyLovelyOnClickListener(int myLovelyVariable) {

this.myLovelyVariable = myLovelyVariable;

}

@Override

public void onClick(View v)

{

//read your lovely variable

}

};

Sherif elKhatib answered 2019-10-10T16:29:46Z

21 votes

针对该问题的另一种解决方案,您可以创建一个常规方法并将要添加onClickListener的View传递给它,然后传递要与其一起使用的参数:

Button b1 = new Button();

String something = "something";

Button b2 = new Button();

String anotherSomething = "anotherSomething";

setOnClick(b1, something);

setOnClick(b2, anotherSomething);

private void setOnClick(final Button btn, final String str){

btn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// Do whatever you want(str can be used here)

}

});

}

Muhammed Refaat answered 2019-10-10T16:30:12Z

7 votes

让您的活动实现View.OnClickListener

将按钮注册到侦听器

检查在onClick中单击了哪个按钮

根据单击的按钮来处理字符串

public class _Test2Activity extends Activity implements OnClickListener {

private Button button1;

private Button button2;

private Button button3;

private String myString;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

button1 = (Button)findViewById(R.id.button1);

button2 = (Button)findViewById(R.id.button2);

button3 = (Button)findViewById(R.id.button3);

button1.setOnClickListener(this);

button2.setOnClickListener(this);

button3.setOnClickListener(this);

myString = "This is a string";

}

@Override

public void onClick(View v) {

if(v==button1) {

//do something with myString

} else if(v==button2) {

//do something with myString

} else if (v==button3) {

//do something with myString

}

}

}

Mark Pazon answered 2019-10-10T16:31:17Z

6 votes

我知道这是一个较晚的答案,但希望它可以对某人有所帮助。 在我的情况下,现有的答案都无效,但是我最终使用了像按钮一样作用的图像的setTag功能。 我的帐户信息在活动开始时设置的全局成员变量中。

在这种情况下,我要建立一个表,每一行都是一个帐户。 单击图像时会显示帐户详细信息(图像只是一个信息图标)。

从而:

// 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);

Gravitoid answered 2019-10-10T16:31:59Z

0 votes

使用以下代码实现OnClickListener

public class Test extends Activity implements OnClickListener{

Button btn1;

Button btn2;

Button btn3;

Button btn4;

Button btn5;

@Override

protected void onCreate(Bundle savedInstanceState) {

//initialize btn...~~~

btn1.setOnClickListener(this);

btn2.setOnClickListener(this);

btn3.setOnClickListener(this);

btn4.setOnClickListener(this);

btn5.setOnClickListener(this);

}

@Override

public void onClick(View view) {

switch(view.getId()) {

case will be determine by Button's Id (R.id.blablabla)

}

}

Joonsung Kim answered 2019-10-10T16:32:27Z

0 votes

如果您具有与视图关联的静态内容,则另一个选择是使用onClick将视图ID映射到内容。

private static Map idToStringMap = new HashMap();

在onClick中初始化地图:

idToStringMap.put(R.id.button1, "hello");

idToStringMap.put(R.id.button2, "world");

// ...

然后从onClick的视图ID中获取值:

public void onClick(View v) {

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

}

这比使用一整套开关盒要干净一点。

Suragch answered 2019-10-10T16:33:22Z

0 votes

请注意,您在Kotlin中执行此操作与在Java中执行此操作有些不同。 在Kotlin中,将onCreate()追加到子类声明中。

现在,请改用Activity的onCreate()方法。 它看起来像这样。

class MainActivity : AppCompatActivity() {

private var btnClick: Button? = null

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

btnClick = findViewById(R.id.btnClick) as Button

btnClick!!.setOnClickListener { startActivity(Intent(this@MainActivity, KotlinActivity::class.java)) }

}

}

Shraddha Patel answered 2019-10-10T16:33:56Z

-1 votes

另一个解决方案可能是不直接在onClick()方法内编写代码,或者,在单独的方法中编写代码,然后在onClick()中调用该方法。

例:

button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

function();

}

});

private void function() {

//your code here

}

HANGOZADA answered 2019-10-10T16:34:25Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值