Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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_Class_Android Studio_Standards - Fatal编程技术网

Java 匿名内部类和良好实践

Java 匿名内部类和良好实践,java,android,class,android-studio,standards,Java,Android,Class,Android Studio,Standards,我正在从一些教程中学习Android,当谈到使用OnClickListeners时,我注意到很多都使用匿名内部类,如下所示: public class MainActivity extends AppCompatActivity { private EditText mNameField; private Button mStartButton; @Override protected void onCreate(Bundle savedInstanceSta

我正在从一些教程中学习Android,当谈到使用OnClickListeners时,我注意到很多都使用匿名内部类,如下所示:

public class MainActivity extends AppCompatActivity {

    private EditText mNameField;
    private Button mStartButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mNameField = (EditText) findViewById(R.id.nameEditText);
        mStartButton = (Button) findViewById(R.id.startButton);

        mStartButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = mNameField.getText().toString();
                Toast.makeText(MainActivity.this, name, Toast.LENGTH_LONG).show();
            }
        });
    }

}

在一个班级里有一个班级被认为是一种好的做法吗?还是在某个地方定义这个类然后引用它会更好?我该怎么做?

内部类
概念只有在没有一个
对象集()的情况下才出现,因为没有另一个
对象()的存在空间。然后可以在
中创建

当Java中引入
AWT
来执行
事件处理时,这个概念出现在
JavaV1.1
中。正如您在代码中使用的那样

mStartButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});
此处
单击
事件,如果且仅存在
可单击对象(例如:-按钮或任何其他)。因此,
EventListener
必须仅与实际需要它的
组件相关联。这是有道理的

=============备选方案=============

您还可以将
OnClickListener()
实现到任何其他自定义
事件处理程序
类。但是这样做将是一项非常繁忙的任务,因为如果您使用了
6
假设)可点击组件,那么您必须编写
六个不同的
类事件处理程序
,并在

                    new View.OnClickListener(new CustomEventHandler()) 

希望你了解这个概念。。还有很多后果,但你至少应该想一想。你可能会得到你的答案

如果您必须复制一些代码,您应该进行一些重构,并且只在一个地方定义它。如果在单个类中使用它

public class MainActivity extends Activity {
View.OnClickListener onClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //some code
    }
};

mStartButton.setOnClickListener(onClickListener);
在多个类中使用同一侦听器时

public class WidelyUsedOnClickListener implements View.OnClickListener {
    @Override
    public void onClick(View v) {
    //some code
    }
} 然后在你的活动中

WidelyUsedOnClickLister onClickListener = new WidelyUsedOnClickLister();
mStartButton.setOnClickListener(onClickListener);

@AndrewRegan的可能副本我知道它们是如何使用的——但我想问它们是否被认为是良好的实践。android文档并没有太多关于什么方法是“最佳”的建议,但是如果你在布局中有几个按钮,你就不会为每个按钮创建匿名类。这就变得麻烦了。相反,考虑将OnCLIKListNER作为活动/片段的一部分来实现。@苏珊:我该怎么做?我在上面发布了更多的代码。如果我想实现监听器而不是作为一个内部类,那就是