我不知道这些是什么,但我想改变这样的事情:
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
代码不是"嵌套"在这样的论点里面。换句话说,我的想法是:
fab.setOnClickListener(something goes here);
//...and then within its own method somewhere,
public void onClickMethodForOnClickListenerOrSomething(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
我不知道我是否清楚自己,但我基本上想要将侦听器作为一个参数撕掉,并使其成为一个单独的函数。我发现它使事情更清晰,因为有这么多的听众,我的OnCreate方法中积累了很多代码。
答案 0 :(得分:3)
由于您需要覆盖onClick方法,因此无法重命名它,但您可以执行以下操作:
public void onClickMethodForOnClickListenerOrSomething(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
public void yourOtherMethod() {
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onClickMethodForOnClickListenerOrSomething(view);
}
});
}
答案 1 :(得分:2)
方法fab.setOnClickListener()
期待一个View.OnClickListener
的对象。
因此,一个选项是创建一个从View.OnClickListener
扩展的新类,并覆盖onClick()
方法。然后你可以做类似
fab.setOnClickListener(new MyOnClickListener());
另一种选择是使用lambdas,如
fab.setOnClickListener((View view)->(Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()));
答案 2 :(得分:0)
如果您使用的是Java 8,则可以编写
class A {
protected:
void foo() {}
};
class B : public A {
friend class C;
};
class C {
void func() {
B b;
b.foo();
}
};
如果不是,您可以在View.OnClickListener中调用fab.setOnClickListener(ClassName::onClickMethodForOnClickListenerOrSomething);
答案 3 :(得分:0)
你有一个OnClickListener接口。该接口应该由View(或其派生)实现。您问题中的第一个示例是界面的内联实现。我假设您想将其更改/移动到在其自己的类中实现它的视图。像这样:
public class Fab implements OnClickListener {
@Override
public void onClick(View v) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
}
用法:
Fab fab = new Fab()
fab.setOnClickListener(aView);