xUtils,butterknife...处理findviewbyid
16lz
2022-05-19
使用注解的办法处理android中,对于findViewById的优化(应该叫方便)。
参考:https://github.com/wyouflf/xUtils
使用Gradle构建时添加一下依赖即可:
compile ‘org.xutils:xutils:3.3.32’
在写android中,经常要出现大量的findviewbyid
et_path = (EditText) findViewById(R.id.et_path); tv_info = (TextView) findViewById(R.id.tv_info);
在这儿介绍一下用注解的办法处理。从此告别findviewbyid。(偶尔)
**xUtils 3**
@ContentView(R.layout.activity_main)public class MainActivity extends AppCompatActivity { @ViewInject(R.id.aaa) private TextView aaa; @ViewInject(R.id.bbb) private TextView bbb; @ViewInject(R.id.ccc) private TextView ccc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// setContentView(R.layout.activity_main); x.view().inject(this);//一定不要忘记这句话。 } // @Event(value = R.id.mybut,type = View.OnClickListener.class) @Event({R.id.buttonOn1,R.id.buttonOn2}) private void button(View view) { if (view.getId() == R.id.buttonOn1) { aaa.setText("sss"); bbb.setText("www"); ccc.setText("eee"); }else if(view.getId() == R.id.buttonOn2){ bbb.setText("2222222"); } }---------- <TextView android:id="@+id/aaa" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="aaaaa" /> <TextView android:id="@+id/bbb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bbbbb" /> <TextView android:id="@+id/ccc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="ccccc!" /> <Button android:id="@+id/buttonOn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button1" /> <Button android:id="@+id/buttonOn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button2" />
**如果你使用的是
uXtils 2 :**
@ViewInject(R.id.et_path) private EditText et_path; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //这句话一定不能少,这句话相当与上面的那句。效果一样 ViewUtils.inject(this); }@ViewInject(R.id.textView)TextView textView;//@ViewInject(vale=R.id.textView, parentId=R.id.parentView)//TextView textView;@ResInject(id = R.string.label, type = ResType.String)private String label;// 取消了之前使用方法名绑定事件的方式,使用id绑定不受混淆影响// 支持绑定多个id @OnClick({R.id.id1, R.id.id2, R.id.id3})// or @OnClick(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3})// 更多事件支持参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。@OnClick(R.id.test_button)public void testButtonClick(View v) { // 方法签名必须和接口中的要求一致 ...}
3,如果你使用的是butterknife,这和上面的有点点不同。
@InjectView(R.id.ok_btn) //控件对应的ID 2 Button mBtn; 3 4 @InjectView(R.id.title_text) 5 TextView mTitleTextView; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState);10 setContentView(R.layout.main_activity);11 12 ButterKnife.inject(this);13 14 //这样之后就可以直接使用变量了15 mTitleTextView.setText("test");16 17 }@InjectViews({ R.id.first_name, R.id.middle_name, R.id.last_name }) List<EditText> nameViews;@OnClick(R.id.submit) public void submit() { // TODO submit data to server... } //还可以批量为多个控件添加为同一个响应函数:@OnClick({ R.id.door1, R.id.door2, R.id.door3 }) public void pickDoor(DoorView door) { if (door.hasPrizeBehind()) { //todo } else { //todo } }注:最新版的库已经将方法名改了,当然也是兼容上面所列的例子的。最新示例如下:class ExampleActivity extends Activity { @FindView(R.id.user) EditText username; @FindView(R.id.pass) EditText password; @OnClick(R.id.submit) void submit() { // TODO call server... } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.bind(this); // TODO Use fields... }}
用gradle配置的时候加入:
compile files(‘libs/butterknife-7.0.1.jar’),自己下载或者github导入包重点内容
sssssssssssssssssss内容
public class MainActivity extends Activity { @Bind(R.id.tv_text1) TextView tv_text1; @Bind(R.id.tv_text2) TextView tv_text2; @Bind(R.id.tv_text3) TextView tv_text3; @Bind(R.id.tv_text4) TextView tv_text4; @Bind(R.id.tv_text5) TextView tv_text5; @Bind(R.id.tv_text6) TextView tv_text6; @Bind(R.id.tv_text7) TextView tv_text7; @Bind(R.id.tv_text8) TextView tv_text8; @BindString(R.string.hello_world) // 设置sting String title; @BindDrawable(R.drawable.ic_launcher) // 设置资源 Drawable graphic; @BindColor(R.color.color_bule) // 设置颜色 int red; @BindDimen(R.dimen.text_size) // 设置dimen值 float spacers; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(MainActivity.this);//绑定。 tv_text1.setText("1231"); tv_text2.setText("1024"); tv_text3.setText("5454"); tv_text4.setText("7865"); tv_text5.setText("9630"); tv_text6.setText("wertw"); } @OnClick(R.id.tv_text1) public void sayHi(TextView button) { button.setText("你按到我了啦!"); } @SuppressLint("NewApi") @OnClick(R.id.tv_text2) public void sayHi2(TextView button) { button.setBackground(graphic); } @OnClick(R.id.tv_text3) public void sayHi3(TextView button) { button.setTextColor(red); } @OnClick(R.id.tv_text4) public void sayHi4(TextView button) { button.setTextSize(spacers); }
**4,如果你使用的是很早的版本,继承RoboActivity的
,则:这个不要在onCreate里面写那几话。**
@InjectView(R.id.button) Button goButton; @InjectView(R.id.textview1) TextView textView1; @InjectView(R.id.textview2) TextView textView2; @InjectView(R.id.textview3) TextView textView3; @InjectView(R.id.textview4) TextView textView4; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.injectview);// goButton.setOnClickListener(mGoListener); goButton.setOnClickListener(this); } @Override public void onClick(View view) { if (view.getId() == R.id.button) { textView1.setText("Clicked"); textView2.setText("Clicked"); textView3.setText("Clicked"); textView4.setText("Clicked"); } }
更多相关文章
- Android——自定义通知栏使用
- Android端JQueryMobile使用教程(二)
- android studio使用错误排查记录
- Android横竖屏切换测试记录
- 调用Android系统设置中的Intent
- Android(安卓)录音
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用