androidannotations注解架構使用
導進項目
配置app子產品中的build.gradle
1. 添加apply plugin: 'android-apt'
2. 在dependencies中添加
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
//注解架構需要插件
def AAVersion = '3.2'
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
3. 在最後添加
//注解架構需要插件
apt {
arguments {
androidManifestFile variant.outputs[0].processResources.manifestFile
resourcePackageName 'com.app.yueke'
}
}
注意:resourcePackageName裡面要替換成自己的包名
配置Project中的build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
//注解架構插件
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
基本使用
Activity調用
@EActivity(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {}
Activity需要在mainfest檔案中修改注冊類名,原類名後加_
Fragment調用
@EFragment(R.layout.fragment_home)
public class HomeFragment extends BaseFragment {}
聲明控件
@ViewById(R.id.iv_ball)
ImageView iv_ball;
如果控件的id和變量名一緻的情況就可以省略(R.id.iv_ball),同理多個聲明
@ViewById
ImageView iv_ball1,iv_ball2,iv_ball3;
控件id名和變量名一緻,且都是同一控件就可以這麼搞
初始化方法調用
@AfterViews
void initViews() {
initVideo();
initEvaluate();
requestData();
requestEvaluate();
}
這個方法相當于在執行完setContentView後執行的方法,初始化資料不涉及UI的可放在onCreate()方法中,涉及到UI指派的必須在這裡執行,注:方法名字可以随便起,方法不能私有化,最好預設
點選事件
@Click({R.id.ll_teadetail_collection, R.id.ll_teadetail_call, R.id.ll_teadetail_appoint})
void onClick(View v) {}
@Click這個注解裡如果隻聲明一個控件的監聽就@Click(R.id.btn1),如果多個的話就需要加{},例如@Click({R.id.ll_teadetail_collection, R.id.ll_teadetail_call})
Item點選事件
@ItemClick
void onItemClick(AdapterView<?> parent, View view, int position, long id) {}
焦點改變事件
@FocusChange({R.id.ll_paid, R.id.ll_unpaid})
void onFocusChange(View v, boolean hasFocus) {}
不足之處
1. 因為編譯的時候要根據注解生成編譯檔案是以編譯比較慢
2. 可能不支援熱修複技術,也是由于會生成編譯後檔案
後續計劃
1. 雖然這個架構也比較熱門,但還是需要多嘗試更多一些注解架構例如Android ButterKnife
2. 對該架構進行源碼分析