Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将内部功能转换为自己的功能?_Java_Android_Oop_Onclick_Onclicklistener - Fatal编程技术网

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);