ctc*_*631 16 android onclick listener
我创建了一个像Mybutton.java这样的自定义组件,我在Mybutton.java中设置了一个onclick监听器.
现在,在我的新活动中,我必须调用Mybutton并在onclick监听器中添加内容.
但是,如果我使用 OnClickListener mClickListener = new OnClickListener(){......
它将替换旧内容.我希望它可以一起做新旧听众.
我搜索了一些信息,发现我可以实现这个方法.经过多次尝试,我仍然遇到错误.
谁能给我一个简单的例子,我可以学习修改它?
Dee*_*eeV 35
我认为Android API中没有允许多个onClick侦听器的API .您需要一些自定义类来处理单个onClick()并传入处理程序以供其调用.像这样的东西:
private class CompositeOnClickListener implements View.OnClickListener{
List<View.OnClickListener> listeners;
public CompositeOnClickListener(){
listeners = new ArrayList<View.OnClickListener>();
}
public void addOnClickListener(View.OnClickListener listener){
listeners.add(listener);
}
@Override
public void onClick(View v){
for(View.OnClickListener listener : listeners){
listener.onClick(v);
}
}
}
Run Code Online (Sandbox Code Playgroud)
设置按钮时,请执行以下操作:
CompositeOnClickListener groupListener = new CompositeOnClickListener();
myButton.setOnClickListener(groupListener);
Run Code Online (Sandbox Code Playgroud)
然后,只要您想添加另一个侦听器,只需调用即可
groupListener.addOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
**** Custom implementation ****
}
});
Run Code Online (Sandbox Code Playgroud)
您可以Button像这样创建自定义类:
public class MyButton extends Button {
private CustomOnClickListener mCustomOnClickListener;
public interface CustomOnClickListener {
void onClick(View v);
}
public MyButton(Context context) {
super(context);
// Set your own onClickListener
View.OnClickListener ocl = new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do whatever you want to do
// Invoke the other added onclick listener
if(mCustomOnClickListener != null) {
mCustomOnClickListener.onClick(v);
}
}
};
setOnClickListener(ocl);
}
// use this function to set the other onclick listener
public void setCustomOnClickListener(CustomOnClickListener cl) {
mCustomOnClickListener = cl;
}
}
Run Code Online (Sandbox Code Playgroud)
并且,像这样使用它:
// create your button
MyButton button = new MyButton(context);
// add your custom onClickListener
button.setCustomOnClickListener(new MyButton.CustomOnClickListener() {
@Override
public void onClick(View v) {
// Do whatever you intend to do after the actual onClickListener
// from MyButton class has been invoked.
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20223 次 |
| 最近记录: |