Java 匿名内部类和良好实践
我正在从一些教程中学习Android,当谈到使用OnClickListeners时,我注意到很多都使用匿名内部类,如下所示: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
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作为活动/片段的一部分来实现。@苏珊:我该怎么做?我在上面发布了更多的代码。如果我想实现监听器而不是作为一个内部类,那就是