Sal*_*lu3 5 android onclicklistener
目标: 我正在寻找一种方法将功能附加到按钮的onClickListener上.
插图
Button trigger = new Button(getActivity());
trigger.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
method1();
}
});
Button runMethod2Button = new Button(getActivity());
runMethod2Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
method1();
method2();
}
});
Button runMethod3Button = new Button(getActivity());
runMethod3Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
method1();
method3();
method4();
}
});
Run Code Online (Sandbox Code Playgroud)
我知道我们可以通过调用继承来做到这一点
@Override
public void method(){
super.method();
// Do appended stuff
}
Run Code Online (Sandbox Code Playgroud)
或者我们可以内联
new Object(){
@Override
public void method(){
super();
// Do appended stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我试过的事情
扩展按钮以包含可运行对象列表.然后设置on click侦听器以触发所有可运行对象.
这样做有不同/更有效的方法吗?
由于我们对为什么要这样做的背景了解不多,因此很难确定什么是最好的。如果您想让原始侦听器保持不变/不变,您可以使用装饰器/包装器模式。
在具体情况下,这意味着,它与您的方法相当Runnable,但您不依赖于另一个接口。一切都通过 来处理View.OnClickListener,它具有以下优点:
扩展不必知道它们是扩展,它们只是正常的OnClickListeners。在您的Runnable方法中,扩展是“特殊的”,例如它们没有获取传递的方法View的参数onClick。
public class OriginalOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"Original Click Listener",Toast.LENGTH_LONG).show();
}
}
public class ExtensionOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"Extension Click Listener",Toast.LENGTH_LONG).show();
}
}
public class DecoratorOnClickListener implements View.OnClickListener {
private final List<View.OnClickListener> listeners = new ArrayList<>();
public void add(View.OnClickListener l) {
listeners.add(l);
}
@Override
public void onClick(View v) {
for(View.OnClickListener l : listeners){
l.onClick(v);
}
}
}
Run Code Online (Sandbox Code Playgroud)用法是这样的:
DecoratorOnClickListener dl = new DecoratorOnClickListener();
dl.add(new OriginalOnClickListener());
dl.add(new ExtensionOnClickListener());
editText.setOnClickListener(dl);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
415 次 |
| 最近记录: |