findViewById()更好的代码结构

时间:2017-05-23 08:18:48

标签: android performance android-layout

我很想知道在Android中使用代码

findViewById(R.id.view_id).setVisibility(View.GONE);

OR

findViewById(R.id.view_id).setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });

这是一个很好的结构,使用“findViewById”或在任何视图上添加任何监听器或应该像

一样使用它
Button buttonA=(Button)findViewById(R.id.view_id);
buttonA.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });

提前致谢。

5 个答案:

答案 0 :(得分:3)

在这种情况下最重要的是一致性。为了使您的代码可读,最好考虑这些事情并制定适用于整个项目的代码指南。

除此之外,这是我的一般规则:

如果我只需要一次视图,我会将其用于内联:

findViewById(R.id.view.id).someMethod();

但如果我在一个方法中需要多次,我会创建一个本地var:

View view = findViewById(R.id.view_id);
view.someMethod();
view.someOtherMethod();

如果我需要在几个方法中使用视图,我声明一个类变量:

private View view;
...
this.view = findViewById(R.id.view_id);
view.someMethod();
view.someOtherMethod();

答案 1 :(得分:1)

它取决于你

Button buttonA=(Button)findViewById(R.id.view_id);
//can be like this
buttonA.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {

      }
});

//or like this
buttonA.setOnClickListener(new MyOwnClickListener());

public class MyOwnClickListener implements View.OnClickListener{
    @Override
    public void onClick(View v) {

    }
}

如果你想要更清晰的视图初始化,请使用ButterKnife

如果您想要更清晰的视图,请使用带有kotlin扩展名的Kotlin。 :d

答案 2 :(得分:1)

我个人会建议使用图书馆,为你做这些事情。 例如,您可以使用Butterknife。要使用它,请在项目gradle文件中添加以下行:

compile 'com.jakewharton:butterknife:8.6.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'

然后,当你进入你的活动时,你可以像这样定义你的按钮:

@BindView(R.id.your_button_id)
Button myButton;

@Override
public void onCreate(Bundle bundle) {
  setContentView(R.layout.your_layout);
  Butterknife.Bind(this);
  //From here on, your button is available.
}

您还可以使用Butterknife的帮助为您的按钮实现onClick-Listener:

@OnClick(R.id.yourButtonId)
public void yourOnClickMethod(View view) {
  // your logic
}

我建议使用这个,因为它避免了很多样板和Butterknife有一些简洁的功能。看看吧!

答案 3 :(得分:0)

不,这不是好方法。你可以使用ButterKnife安卓库。你不需要'findViewById'或者' setOnClickListener',相信我;)你的代码将是干净的!

http://jakewharton.github.io/butterknife/

答案 4 :(得分:0)

对我而言,在onCreate中绑定所有视图总是比较容易,所以我将它们放在一个地方。

另一件有用的东西是奶油刀库。 http://jakewharton.github.io/butterknife/