如何将内部函数改成自己的函数?
How to change internal functions into their own functions?
我不知道这些叫什么,但我想改变这样的东西:
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();
}
});
变成代码不是 "nested" 那样的参数。换句话说,我的想法是:
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 方法中积累了很多代码。
由于需要重写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);
}
});
}
如果你用的是Java 8 你可以只写
fab.setOnClickListener(ClassName::onClickMethodForOnClickListenerOrSomething);
如果你不是,你可以在 View.OnClickListener
中调用你的 onClickMethodForOnClickListenerOrSomething
方法 fab.setOnClickListener()
需要 View.OnClickListener
的对象。
因此,一种选择是创建一个新的 class,它从 View.OnClickListener
扩展并覆盖 onClick()
方法。然后你可以做类似
fab.setOnClickListener(new MyOnClickListener());
另一种选择是使用 lambda,例如
fab.setOnClickListener((View view)->(Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()));
您有一个接口,OnClickListener。该接口应该由视图(或其派生)实现。您问题中的第一个示例是接口的内联实现。我假设您希望 change/move 将其转换为在其自身 class 中实现它的视图。像这样:
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);
我不知道这些叫什么,但我想改变这样的东西:
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();
}
});
变成代码不是 "nested" 那样的参数。换句话说,我的想法是:
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 方法中积累了很多代码。
由于需要重写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);
}
});
}
如果你用的是Java 8 你可以只写
fab.setOnClickListener(ClassName::onClickMethodForOnClickListenerOrSomething);
如果你不是,你可以在 View.OnClickListener
中调用你的onClickMethodForOnClickListenerOrSomething
方法 fab.setOnClickListener()
需要 View.OnClickListener
的对象。
因此,一种选择是创建一个新的 class,它从 View.OnClickListener
扩展并覆盖 onClick()
方法。然后你可以做类似
fab.setOnClickListener(new MyOnClickListener());
另一种选择是使用 lambda,例如
fab.setOnClickListener((View view)->(Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()));
您有一个接口,OnClickListener。该接口应该由视图(或其派生)实现。您问题中的第一个示例是接口的内联实现。我假设您希望 change/move 将其转换为在其自身 class 中实现它的视图。像这样:
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);