我制作了一个动态创建 3 个按钮的应用程序。由于某些原因,我需要从我创建的类中创建每个按钮。
在这个类中我写了这个:
public class FloatButton{
public void generate(String text, final Context context){
Button button = new Button(context);
button.setText(text);
}
现在在我的主要 Activity 中,我创建了一个此类的对象:
FloatButton floatButton = new FloatButton();
floatButton.generate("float Button", this);
现在解决问题...我需要为每个按钮添加一个单独的 onclick 监听器。我想通过单击按钮与类(class)的其他按钮进行交互。这就是为什么我需要将 onclick 监听器写入我的主要 Activity 而不是写入 FloatButton 类。所以我尝试了以下方法:
floatButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
这不起作用,因为 floatButton 对象没有 setOnClickListener 方法,因为它不是按钮类的一部分。
我还尝试为类中的按钮设置一个 Id。因此这个类看起来像这样:
public class FloatButton{
public void generate(String text, int id, final Context context){
Button button = new Button(context);
button.setId(id);
button.setText(text);
}
}
现在我希望通过按钮id设置onclicklistener:
final OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.1:
...
break;
case R.id.2:
...
break;
}
}
可悲的是 R.id。 ... 也不起作用,因为 Id 仅在按钮已创建时可用。
那么我还能尝试做什么呢?
最佳答案
你可以像下面这样实现:
public class FloatButton{
private ClickListener listener;
public void generate(String text, final Context context){
Button button = new Button(context);
button.setText(text);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null){
listener.onClick(v);
}
}
});
}
public void setListener(ClickListener listener){
this.listener = listener;
}
public interface ClickListener {
void onClick(View view);
}
}
Activity 类
FloatButton floatButton = new FloatButton();
floatButton.generate("float Button", this);
floatButton.setOnClickListener(new FloatButton.ClickListener() {
@Override
public void onClick(View v) {
// You will receive all the generated button click events here in
// single callback.
// Do whatever you want to do here...
}
});
关于android onclicklistener 在类里面有按钮吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567151/