2016-06-01 44 views
1

我做了一个动态创建3个按钮的应用程序。由于某些原因,我需要从我创建的课程中创建每个按钮。android onclicklistener类与按钮里面?

这个类里我写了这个:

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才可用。

那么我还能做什么?

+0

你必须使用界面技术在你的按钮类更有效地互动 – Riskhan

回答

0

在活动

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

    } 
}); 
+0

太棒了!我没想到要返回按钮。我会在一分钟内尝试一下 – Boreena

1

你产生功能改变

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

然后设置监听器返回的对象上,你可以做到这一点象下面这样:

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

也很好的解决方案。非常感谢你。 – Boreena

1

您可以实例化你的floatButton后吸气添加到按钮

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

} 

所以对象,你可以用你的getter

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

    } 
}); 
0

设置onClickListener从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 
} 

你将能够设置onClickListener或任何你通常会做的常规按钮