Android studio 3.x集成butterknife 8.8.1 集成 使用 及集成时错误解决

一 集成ButterKnife  报错 

解决办法 : 只添加 app下 build.gradle  

compile 'com.jakewharton:butterknife:8.8.1'

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

二 基本功能

1     @BindView(int id);  绑定单个view

      @BindView(R.id.tv) TextView tv_main;

2     @BindViews初始化多个View
       @BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })

       List<EditText> nameViews; 

3       @OnClick设置监听事件

 @OnClick(R.id.submit)
    public void submit(View view) {
        // TODO do something… 
    }

          如果不想要submit方法参数可以去掉如: 

 @OnClick(R.id.submit) 
         public void submit() { 
         // TODO do something… 
         }

       View的参数还可以自动转换,比如给TextView设置点击事件 

  @OnClick(R.id.submit) 
         public void submit(TextView textView) { 
        // TODO do something… 
        }
        如果是自定义的View可以不指定View Id 如: 
    public class FancyButton extends Button { 
          @OnClick 
           public void onClick() { 
            // TODO do something! 
            } 
        }
     在单个绑定中指定多个ID用于公共事件处理。
  @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();
           }
      }

4  listView item点击事件

@OnItemSelected(R.id.list_view) 
void onItemSelected(int position) { 
// TODO … 
}
5  view的onTouchEvent
  
 @OnTouch(R.id.example) boolean onTouch() { 
           Toast.makeText(this, “Touched!”, Toast.LENGTH_SHORT).show(); 
           return false; 
      }

6  监听EditText的addTextChangedListener

  @OnTextChanged(R.id.example) void onTextChanged(CharSequence text) { 
          Toast.makeText(this, “Text changed: ” + text, Toast.LENGTH_SHORT).show(); 
      }

7  设置ViewPager的OnPageChangeListener

 @OnPageChange(R.id.example_pager) void onPageSelected(int position) { 
             Toast.makeText(this, “Selected ” + position + “!”, Toast.LENGTH_SHORT).show(); 
       }

8 设置TextView的OnEditorActionListener(该事件主要用来设置软键盘上的按钮)

       @OnEditorAction(R.id.example) boolean onEditorAction(KeyEvent key) { 
               Toast.makeText(this, “Pressed: ” + key, Toast.LENGTH_SHORT).show(); 
              return true; 
        }

9 设置View的OnFocusChangeListener事件

  @OnFocusChange(R.id.example) void onFocusChanged(boolean focused) { 
               Toast.makeText(this, focused ? “Gained focus” : “Lost focus”, Toast.LENGTH_SHORT).show(); 
         }

10 设置View的OnLongClickListener长按事件

       @OnLongClick(R.id.example) boolean onLongClick() { 
                Toast.makeText(this, “Long clicked!”, Toast.LENGTH_SHORT).show(); 
                return true; 
        }

11  关于资源的绑定

@BindString(R.string.title) String title; //字符串 
@BindDrawable(R.drawable.graphic) Drawable graphic; //drawable 
@BindColor(R.color.red) int red; // int or ColorStateList field 
@BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field 
@BindArray(R.array.countries) String[] countries; 字符串数组 
@BindArray(R.array.icons) TypedArray icons; 
@BindBool(R.bool.is_tablet) boolean isTablet;

三 实践 

  activity中的使用

class ExampleActivity extends Activity {
  @BindView(R.id.title) TextView title;
  @BindView(R.id.subtitle) TextView subtitle;
  @BindView(R.id.footer) TextView footer;
  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // TODO Use fields...
  }
}

  Adapter中的使用:

public class MyAdapter extends BaseAdapter {
  @Override public View getView(int position, View 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 {
    @BindView(R.id.title) TextView name;
    @BindView(R.id.job_title) TextView jobTitle;

    public ViewHolder(View view) {
      ButterKnife.bind(this, view);
    }
  }
}

  注意Fragment中使用注意回收资源:

public class FancyFragment extends Fragment {
  @BindView(R.id.button1) Button button1;
  @BindView(R.id.button2) Button button2;
  private Unbinder unbinder;

  @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    unbinder = ButterKnife.bind(this, view);
    // TODO Use fields...
    return view;
  }

  @Override public void onDestroyView() {
    super.onDestroyView();
    unbinder.unbind();
  }
}

四 方法总结:

事件注入:


bind


五 代码混淆

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
六 插件安装及使用

  windows  Ctrl+ Alt+ s  打开设置  插件  选择线上搜索  



安装后重启: 下面开始使用:  在布局右键   --> genergte  或者Alt+ insert


然后选择要初始化的资源    可以勾选点击   和生成的名字  省去 手动添加注解



猜你喜欢

转载自blog.csdn.net/xuwb123xuwb/article/details/80229798
今日推荐