天天看點

androidannotations注解架構使用androidannotations注解架構使用

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. 對該架構進行源碼分析