我正在从一些教程学习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();
}
});
}
}
在课堂上开课是不错的做法?或者以某种方式在某个地方定义这个类然后引用它更好?我该怎么做?
答案 0 :(得分:1)
如果必须复制一些代码,则应该进行一些重构并仅在一个地方定义它。如果在一个班级中使用它。
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);
答案 1 :(得分:0)
Inner Class
概念只有在没有现有{{1>}(类)的情况下才会出现另一个Objcet
不存在范围(类)。然后,您可以在Object
内创建class
。
当在Java中引入Class
来执行Java v1.1
时,此概念出现在AWT
中。正如您在代码中使用的那样
eventhandling
此处mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
事件,如果且仅存在Click
(例如: - 按钮,或任何其他)。因此,Clickable Object
必须仅与实际需要它的EventListener
相关联。这是有道理的......
========== =============替代
您还可以将components
实施到任何其他自定义OnClickListener()
班级。但这样做将是一项非常繁忙的任务,因为如果您使用Event Handler
(假设)可点击的Componenets,那么您必须写 6
six
并在
Class EventHandler
Class
希望你有这个概念......还有很多后果,但你应该至少考虑一次。你可能得到你的答案。