Butterknife
Let's proceed from tediousfindViewById. The following is the usage method.
Activity
Class exampleactivity extends activity {@ injectview (R. id. title) textview title; @ injectview (R. id. subtitle) textview subtitle; @ injectview (R. id. footer) textview footer; @ override public void oncreate (bundle savedinstancestate) {super. oncreate (savedinstancestate); setcontentview (R. layout. simple_activity); butterknife. inject (this); // todo use "injected" views ...}}
Butterknife. Reset (this) is used when fragment is destroyed );
public class FancyFragment extends Fragment { @InjectView(R.id.button1) Button button1; @InjectView(R.id.button2) Button button2; @Override View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fancy_fragment, container, false); ButterKnife.inject(this, view); // TODO Use "injected" views... return view; }}
Adapter
Public class myadapter extends baseadapter {@ override
Public View getview (INT position, view, viewgroup parent) {viewholder holder; If (view! = NULL) {holder = (viewholder) view. gettag ();} else {view = Inflater. inflate (R. layout. whatever, parent, false); holder = new viewholder (View); view. settag (holder);} holder. name. settext ("John Doe"); // etc... return view;} static class viewholder {@ injectview (R. id. title) textview name; @ injectview (R. id. job_title) textview jobtitle; Public viewholder (view) {butterknife. inject (this, view );}}}
View lists
@ Injectviews ({R. Id. first_name, R. Id. middle_name, R. Id. last_name}) List <edittext> nameviews;Click listener Injection
@OnClick(R.id.submit) public void submit() { // TODO submit data to server... }
@OnClick(R.id.submit) public void sayHi(Button button) { button.setText("Hello!"); }You can also bind multiple control IDs.
@OnClick({ R.id.door1, R.id.door2, R.id.door3 }) public void pickDoor(DoorView door) { if (door.hasPrizeBehind()) { Toast.makeText(this, "You win!", LENGTH_SHORT).show(); } else { Toast.makeText(this, "Try again", LENGTH_SHORT).show(); } }Injection reset destruction ButterKnife.reset(this);
By default@InjectViewAnd@OnClickWhen you find the control, it cannot be empty. Otherwise, an exception is thrown.
You can add@OptionalAllowed to be empty
@Optional @InjectView(R.id.might_not_be_there) TextView mightNotBeThere; @Optional @OnClick(R.id.maybe_missing) void onMaybeMissingClicked() { // TODO ... }
Configuration of butterknife in Eclipse:
Click OK!