android onclicklistener 在类里面有按钮吗?

标签 android class button onclick

我制作了一个动态创建 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/

相关文章:

C++ 为什么同一个变量的值不同?

android - Libgdx:如何保存首选项?

android - 使用 picasso 的“收到的内容长度为0的标题的响应”错误

c# - 从派生&&子类访问基类字段

c++ - 调用对象的析构函数是否等同于在对象上调用delete?

html - 为什么在一个HTML页面中不能使用许多播放/暂停按钮?

Javascript - 如何使用数组中的元素设置按钮的值?

button - Xamarin.Forms:删除按钮内的填充

android - 重命名布局元素的 ID 不会重命名 viewBinding 引用

java - 单击 recyclerView 中的下一个按钮后加载下一个项目