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