匿名内部阶级和良好实践

时间:2016-03-05 16:56:48

标签: java android class android-studio standards

我正在从一些教程学习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();
            }
        });
    }

}

在课堂上开课是不错的做法?或者以某种方式在某个地方定义这个类然后引用它更好?我该怎么做?

2 个答案:

答案 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

希望你有这个概念......还有很多后果,但你应该至少考虑一次。你可能得到你的答案。