butterknife

阿里大神手把手教你Android ButterKnife 的实现思路,建议收藏!

做~自己de王妃 提交于 2020-03-30 20:42:51
在Android开发中,我们为了方便初始化Activity中的各种View,我们可能会使用到Jake Wharton的 ButterKnife库,这个库是针对View、资源id等进行注解的开源库,它能够去除掉一些丑陋不堪的样板式代码,使得我们的代码更加简洁、易于维护,同时基于APT也使得它的效率得到保证。 (如果你想快速了解ButterKnife的实现思路,可以先阅读 ExampleActivity$InjectAdapter类以及后续的结论,然后再回过头来阅读 ) 下面我们来看看 ButterKnife 的简单使用。 首先我们看在没有使用ButterKnife时,我们初始化一个 Activity中的各个控件的代码: 在ExampleActivity函数的onCreate函数中,我们通常会对各个子视图进行初始化,这些代码看起来重复性很高,而且丑陋不堪,几乎都要对View进行强转,当一个布局中含有十个以上的View时,再加上为某些View添加上事件处理等,这部分的代码将占用很大的篇幅。 ButterKnife就是为了简化这些工作而出现的,让开发人员专注在真正有用的代码上。使用ButterKnife之后我们的代码变成了这样: 当运行完onCreate函数之后Activity中的几个View就已经被初始化了。findViewById、强制转换等样板代码被去除了,代码变得更加简单

BottomNavigationView+Fragment/RadioGroup+Fragment等多种方式 实现底部导航条

*爱你&永不变心* 提交于 2020-03-10 15:19:22
Android 实现底部导航条有多种方式 1BottomNavigationView+Fragment 2RadioGroup+Fragment 3TabHost+Fragment BottomNavigationView+Fragment 实现 xml文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/content_main" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/bottomNavigation" android:layout

android studio 安装完成插件ButterKnife,但无法使用?

别说谁变了你拦得住时间么 提交于 2020-03-07 19:20:25
1.在设置里找到插件正常安装好 2.选择activity_main右键Generate菜单中没有相应的插件选项 3.我们需要导入相应的依赖包implementation ‘com.github.stephanenicolas:butterknife:10.0.0.6’ 4.在右键试一下ok行了,有相应的ButterKnife插件选项了 5.点击选项自动生成代码 6.需要注意要是.java文件才行不能是kotlin的 .kt文件 来源: CSDN 作者: csdm_admin 链接: https://blog.csdn.net/csdm_admin/article/details/104717617

Android学习笔记- ButterKnife 8.0注解使用介绍

爷,独闯天下 提交于 2020-03-06 19:08:26
前言: App项目开发大部分时候还是以UI页面为主,这时我们需要调用大量的findViewById以及setOnClickListener等代码,控件的少的时候我们还能接受,控件多起来有时候就会有一种想砸键盘的冲动。所以这个时候我们想着可以借助注解的方式让我们从这种繁重的工作中脱离出来,也让代码变得更加简洁,便于维护,今天主要学习一下只专注View、Resource、Action注解框架ButterKnife。 ButterKnife介绍 ButterKnife是一个专注于Android系统的View、Resource、Action注入框架。 官网:http://jakewharton.github.io/butterknife/ gitHub:https://github.com/JakeWharton/butterknife/ ButterKnife使用前后对比: 看看没有使用View注解之前我们是如何做的 1.)使用之前 public class ExampleActivity extends AppCompatActivity { private final static String TAG = ExampleActivity.class.getSimpleName(); String butterKnifeStr; Drawable

注解使用--ButterKnife原理分析

爷,独闯天下 提交于 2020-02-29 16:44:16
#目录 1. 什么是注解 2. 分类 3. 定义注解 4. 定义注解处理器 5. ButterKnife原理 #1.什么是注解 JDK 5增加了注解,是代码中的特殊标志,可在编译,类加载是,运行时被读取并进行相应操作。 #2.分类 2.1 标准注解 @override : 对父类方法进行重写标志 @Deprecated : 过时方法添加的标志 @SuppressWarning : 选择性取消特定代码的警告 @SafeVarargs : 声明可变长度参数方法 2.2 元注解 元注解就是用于注解其他注解 @Target : 注解所修饰的对象范围 @Inherited:表示注解可被继承 @Documented: 表示注解应为JavaDoc工具记录 @Retention: 声明注解保留策略 @Repeatable:允许一个注解在同一个声明类型上多次使用 注: #@Target 取值为ElementType 类型数组 TYPE: 修饰类,接口,枚举类型 FIELD: 修饰成员变量 METHOD: 修饰方法 PARAMETER: 修饰参数 CONSTRUCTOR: 修饰构造函数 LOCAL_VARIABLE: 修饰局部变量 ANNOTATION_TYPE: 修饰注解 PACKAGE: 修饰包 TYPE_USE: 使用类型 #@Retention 取值有三种不同级别保留策略

如何在片段中使用XML onClick处理按钮单击

跟風遠走 提交于 2020-02-26 13:26:31
蜂窝前(Android 3),每个活动均已注册,以通过布局XML中的 onClick 标记处理按钮单击: android:onClick="myClickMethod" 在该方法中,您可以使用 view.getId() 和switch语句来执行按钮逻辑。 随着Honeycomb的引入,我将这些活动分解为片段,可以在许多不同的活动中重用这些片段。 按钮的大多数行为都是独立于活动的,我希望代码驻留在Fragments文件中, 而无需 使用为每个按钮注册 OnClickListener 的旧方法(1.6版之前)。 final Button button = (Button) findViewById(R.id.button_id); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click } }); 问题是当我的布局膨胀时,仍然是托管活动正在接收按钮点击,而不是单个片段。 是否有一个好的方法 注册片段以接收按钮点击? 将点击事件从“活动”传递到它们所属的片段? #1楼 在处理片段时,我宁愿使用代码中的单击处理,也不愿使用XML中的 onClick 属性。 将您的活动迁移到片段时,这变得更加容易。 您可以直接从每个 case

Butter Knife

感情迁移 提交于 2020-02-22 00:00:03
Butter Knife处理字段和方法绑定. 重要更新: 目前(2016.4.29), ButterKnife的最新版本是8.0.1. Demo项目已更新: https://github.com/mengdd/AndroidButterKnifeSample 以下原文是针对ButterKnife v6.1.0的, v8.0.1主要的不同在以下几个关键词: @InjectView -> @BindView @InjectViews -> @BindViews ButterKnife.inject(this) -> ButterKnife.bind(this) ButterKnife.reset(this) -> private Unbinder unbinder; unbinder = ButterKnife.bind(this, view); @Override public void onDestroyView() { unbinder.unbind(); super.onDestroyView(); } 配置: 用gradle配置的时候加入: compile 'com.jakewharton:butterknife:6.1.0' 注意是加在Module: app的gradle文件中. 加上之后不用运行什么命令,直接Sync一下就可以在External

Android开源框架之ImageLoader

假装没事ソ 提交于 2020-01-31 14:23:45
特点 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置 支持图片的内存缓存,文件系统缓存或者SD卡缓存 支持图片下载过程的监听 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片, 一般使用在ListView,GridView中 ,滑动过程中暂停加载图片,停止滑动的时候去加载图片 提供在较慢的网络下对图片进行加载 下载地址 https://github.com/nostra13/Android-Universal-Image-Loader 准备工作 1)导入universal-image-loader-1.9.5.jar到项目中 2)创建MyApplication继承Application,在oncreate()中初始化ImageLoader public class MyApplication extends Application { @Override public void onCreate ( ) { super . onCreate ( ) ; // 初始化参数

Using Butter Knife in Custom BaseAdapter SubClass Results in “Unable to inject views” error

喜欢而已 提交于 2020-01-22 17:06:10
问题 I'm attempting to use Butter Knife to simplify creation of a custom BaseAdapter class. I'm following the example here: http://jakewharton.github.io/butterknife/ under the "Another use is simplifying the view holder pattern inside of a list adapter." section. Unfortunately, I am getting an "Unable to inject views" error each time the ViewHolder is created for each item in the list. Here is my code: public class ButterknifeCustomBaseAdapter extends BaseAdapter{ @Override public int getCount() {

Android Studio: Integrating Butterknife?

99封情书 提交于 2020-01-22 13:32:51
问题 I am trying to implement Butterknife into my android studio project. However when I do so I get an error on @InjectView "cannot resolve symbol InjectView". Have I not implemented Butterknife sucsessfully? Activity code: package com.example.rodf.testapp; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends ActionBarActivity { @InjectView(R.id.tvHelloWorld) TextView tv1; @Override