安卓onclicklistener在课堂上有按钮



我制作了一个动态创建3个按钮的应用程序。出于某些原因,我需要从我制作的类中创建每个按钮。

在这节课上,我写了这样的话:

public class FloatButton{
public void generate(String text, final Context context){

Button button = new Button(context);
button.setText(text);
}

现在,在我的主要活动中,我创建了一个此类对象:

FloatButton floatButton = new FloatButton();
floatButton.generate("float Button", this);

现在来谈谈问题。。。我需要为每个按钮添加一个单独的onclick监听器。我想通过单击一个按钮与该类的其他按钮进行交互。这就是为什么我需要将onclick监听器写入到我的主要活动中,而不是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);
}
}

活动类别

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...
}
});

您可以在按钮中添加一个getter

public class FloatButton{
private Button button;
public void generate(String text, final Context context){
button = new Button(context);
button.setText(text);
}
public getButton(){
return button;
}
}

因此,在实例化floatButton对象后,您可以使用getter 设置onClickListener

floatButton.getButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});

将生成函数更改为

public Button generate(String text, final Context context){
Button button = new Button(context);
button.setText(text);
return button;
} 

然后在活动中的返回对象上设置监听器

Button generated =  floatButton.generate("float Button", this);
generated.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});

像这样从button类扩展按钮类FloatButton

public class FloatButton extends Button {
public FloatButton(Context context) {
super(context);
}
public FloatButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FloatButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void generate(String text, final Context context) {
FloatButton button = new FloatButton(context);
button.setText(text);
}
//Rest of your methods
} 

您将能够设置ClickListener或任何您通常使用常规按钮进行的操作

最新更新