Android ButterKnife示例

时间:2020-02-23 14:28:47  来源:igfitidea点击:

在本教程中,我们将讨论Android ButterKnife工具并研究其用法。

Android ButterKnife

Android Butterknife是一种视图绑定工具,它使用注释为我们生成样板代码。
ButterKnife由Square的Jake Wharton开发,本质上用于在处理视图时保存诸如findViewById(R.id.view)之类的重复输入代码行,从而使我们的代码看起来更简洁。

ButterKnife Android依赖性

要在Android应用程序中使用ButterKnife,我们需要将以下依赖项添加到我们的build.gradle文件中。

compile 'com.jakewharton:butterknife:6.1.0'

Android ButterKnife注入

在使用任何视图之前,我们需要通过在活动的onCreate()方法中添加以下代码来注入ButterKnife。

ButterKnife.inject(this);

注意:使用片段时,我们需要在onCreateView()中指定视图的来源,如下所示。

View view = inflater.inflate(R.layout.sample_fragment, null);
ButterKnife.inject(this, view);

Android ButterKnife示例

下面显示了一个使用ButterKnife的简单活动示例。

public class MainActivity extends Activity {  
@InjectView(R.id.sample_text) TextView textView;
@InjectView(R.id.sample_button) Button button;

@Override 
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ButterKnife.inject(this);
  textView.setText("You can change this view accordingly");

  @OnClick(R.id.click_button) 
  void buttonClick() {  
  //..you don't even need the line @InjectView(R.id.click_button) if this button isn't being used else where
}

}
}

在上面的代码片段中,@ OnClick是ButterKnife注释,它消除了对setOnClickListener方法的需要。
以下方法自动配置为该注释。
方法内部的参数是可选的。

我们可以在单个绑定中为常见事件处理指定多个ID,如下所示。

@OnClick({ R.id.btn1, R.id.btn2, R.id.btn3 })
public void commonMethod(Button button) {
button.setText("Text specified here would be same for all");
}

在上面的代码中,将自动强制转换特定类型的视图(按钮)。

下面给出了在片段中实现ButterKnife的示例。

public class SomeFragment extends Fragment {

  @InjectView(R.id.textView) 
  TextView textView;

  @Override
  public View onCreateView(LayoutInflater inflater,
          ViewGroup container, Bundle savedInstanceState) {

      ViewGroup rootView = (ViewGroup) inflater
              .inflate(R.layout.some_layout, container, false);

      ButterKnife.inject(this, rootView);

      //Work on the TextView
      someTextView.setVisibility(View.VISIBLE);
      return rootView;
  }

  @OnClick({ R.id.imageView, R.id.someTextView })
  public void doSomething() {
      //Do something when imageView or someTextView is clicked.
  }

  @Override
  public void onDestroyView() {
      super.onDestroyView();
      //Set views to null:
      ButterKnife.reset(this);
  }
}

对于ListView项目,请使用以下注释。

@OnItemSelected(R.id.list_view)
void onItemSelected(int position) {
//TODO ...
}

注意:如果找不到目标视图,则会引发异常。
为了抑制这种异常,我们可以添加一个@Nullable注解,从而使其成为可选的绑定。