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注解,从而使其成为可选的绑定。

