gpt4 book ai didi

java - 在 Java 中将方法作为参数传递以将监听器分配给多个按钮

转载 作者:行者123 更新时间:2023-12-02 07:10:41 26 4
gpt4 key购买 nike

我是 Java 新手(来自 Python),我正在尝试将方法作为参数传递以转换此代码:

Button button1;
Button button2;
...
Button buttonN;

button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClick_button1(v);
}
});

button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClick_button2(v);
}
});

(...)

buttonN = (...)

类似于:

public AssignListener( integer tButton, Method tMethod )
{
button_view = (Button) findViewById(tButton);

button_view.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
tMethod(view);
}
}
}

(...)

AssignListener( R.id.button1, onClick_button1 );
AssignListener( R.id.button2, onClick_button2 );
(...)
AssignListener( R.id.buttonN, onClick_buttonN );

我读到您无法将方法传递给函数,并提出了一些使用 Runnable 包装我的函数来实现此目的的建议。

我不清楚该怎么做。关于如何轻松做到这一点有什么想法吗? :?

谢谢。

编辑:我应该将“AssignListener”包装在它自己的类中并传递该类本身吗? :?

最佳答案

您可以在 onCreate 方法中调用 findViewById() 和 seOnClickListener,以及在 onCreate 之外调用 OnClickListenet。

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

or

findViewById(R.id.button1).seOnClickListener(mClickListener);
findViewById(R.id.button2).seOnClickListener(mClickListener);
findViewById(R.id.button3).seOnClickListener(mClickListener);
findViewById(R.id.button4).seOnClickListener(mClickListener);

private OnClickListener mClickListener = new View.OnClickListener(
public void onClick(View view){
switch(view.getId()){
case R.id.button1:
//button1 click handle here...
break;
case R.id.button2:
//button2 click handle here...
break;
case R.id.button3:
//button3 click handle here...
break;
case R.id.button4:
//button4 click handle here...
break;
}
});

尝试一下,希望对你有帮助。

关于java - 在 Java 中将方法作为参数传递以将监听器分配给多个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15565737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com