Java 如何将内部功能转换为自己的功能?
我不知道这些被称为什么,但我想改变如下:Java 如何将内部功能转换为自己的功能?,java,android,oop,onclick,onclicklistener,Java,Android,Oop,Onclick,Onclicklistener,我不知道这些被称为什么,但我想改变如下: fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setActi
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();
}
});
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.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);
}
});
}
由于需要重写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);
}
});
}
如果您使用的是Java8,那么只需编写
fab.setOnClickListener(ClassName::onClickMethodForOnClickListenerOrSomething);
如果您不是,您可以在视图中调用您的
onclickmethodforonclicklistener或something
。OnClickListener如果您使用的是Java 8,您可以编写
fab.setOnClickListener(ClassName::onClickMethodForOnClickListenerOrSomething);
如果您不是,您可以在视图中调用您的
onclickmethodforonclicklistener或某物。OnClickListener方法fab.setOnClickListener()
需要一个视图的对象。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()));
方法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()));
您有一个接口,OnClickListener。该接口应该由视图(或其派生)实现。问题中的第一个示例是接口的内联实现。我假设您希望将其更改/移动到在自己的类中实现它的视图中。大概是这样的:
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();
}
});
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);
您有一个接口,OnClickListener。该接口应该由视图(或其派生)实现。问题中的第一个示例是接口的内联实现。我假设您希望将其更改/移动到在自己的类中实现它的视图中。大概是这样的:
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();
}
});
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);