zoukankan      html  css  js  c++  java
  • Androidannotations框架

    Java注解:

       注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

    作用分类:
    ①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
    ② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
    ③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】
    Androidannotations框架特性
    1、使用依赖注入(Dependency Injection)

    2、简化的线程模型(Simplified  threading model)  

    3、事件绑定(Event binding)

    4、REST Client

    5、No Magic  [不知道为什么这样称呼,直译过来就是:无魔法,它的意思是:AndroidAnnotations在编译

    的时候会产生一个子类(接下来你会明白),你查看这个子类,可以看到它是如何工作的]

    AndroidAnnotations官网: http://androidannotations.org/

    代码:

    @NoTitle  //无标题
    @Fullscreen //全屏
    @EActivity(R.layout.activity_my)
    public class MyActivity extends ActionBarActivity {
        //==============================================基本的注解=================================================
        @ViewById
        Button button1;
    
        @ViewById
        Button button2;
    
        @ViewById(R.id.textview1)   //指定id的注入
        TextView textView;
    
        @ViewById
        ProgressBar progressBar;
    
        @ViewById
        ImageView imageView;
    
        //获取系统service的方法(取代原来的clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);)
        @SystemService
        ClipboardManager clipboardManager;
    
        @Click({R.id.button1,R.id.button2,R.id.button3,R.id.button4})
        public void simpleButtonOnClicked(View view){
            switch (view.getId()){
                case R.id.button1:{
                    textView.setText("Button1 is Clicked!");
                }
                break;
                case R.id.button2:{
                    textView.setText("Button2 is Clicked!");
                }
                break;
                case R.id.button3:{
                    String content = clipboardManager.getText().toString();
                    Toast.makeText(getApplicationContext(),"剪贴板内容: " + content, Toast.LENGTH_SHORT).show();
                }
                break;
                case R.id.button4:{
                    Toast.makeText(getApplicationContext(),"滚动条开始了!",Toast.LENGTH_SHORT).show();
                    progressBarWorks();
                }
                break;
            }
        }
    
    
        @LongClick({R.id.button2})
        public void buttonOnLongClicked(View view){
            switch (view.getId()){
                case R.id.button1:{
                    textView.setText("Button1 is LongClicked!");//由于没注册,所以不可能被触发
                }
                break;
                case R.id.button2:{
                    textView.setText("Button2 is LongClicked!");//可触发
                }
                break;
            }
        }
    
        //===================================================关于资源的注解=========================================
    
        @AnimationRes(R.anim.rotate)
        Animation animationRotate;
    
        @DrawableRes(R.drawable.myphoto)
        Drawable myphoto;
    
        @ColorRes(R.color.love)
        Integer mycolor;
    
        @TextRes(R.string.textres)
        CharSequence text;
    
        @Click({R.id.button5,R.id.button6,R.id.button7})
        public void animationButtonOnClicked(View view){
            switch (view.getId()){
                case R.id.button5:{
                    imageView.startAnimation(animationRotate);
                }
                break;
                case R.id.button6:{
                    imageView.setImageDrawable(myphoto);
                }
                break;
                case R.id.button7:{
                    Toast.makeText(getApplicationContext(),text.toString(),Toast.LENGTH_SHORT).show();
                }
                break;
            }
        }
    
        //==============================================关于线程的注解================================================
        //相当于一个新的任务AsyncTask或者新线程Thread
        @Background
        public void progressBarWorks(){
            //相当于一个新的线程中执行: @Background
            int i = 1;
            while (i <= 10){
                Log.e("progress","进度: " + i);
                try {
                    Thread.sleep(1000);
                    updateProgressBar(i);
                    //直接progressBar.setProgress(i);也可以的,所以@Background注解内部可能实现了handler机制
                    i++;
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        //指代UI线程
        @UiThread
        public void updateProgressBar(int i){
            progressBar.setProgress(i);
            if (i == 10){
                Toast.makeText(getApplicationContext(), "滚动条结束",Toast.LENGTH_SHORT).show();
            }
        }
    
        //=======================================关于几个事件的先后顺序===============================================
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.e("FirstToLast", "onCreate");
    
            //可省略!
            //setContentView(R.layout.activity_my);
    
            //progressBar.setMax(100);  报错,空指针异常
            //因为在onCreate()被调用的时候,@ViewById还没有被set,也就是都为null
            //所以如果你要对组件进行一定的初始化,那么你要用@AfterViews注解
        }
    
        @AfterViews
        public void init(){
            Log.e("FirstToLast","init");
            progressBar.setMax(10);
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            Log.e("FirstToLast","onResume");
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            Log.e("FirstToLast","onStart");
        }
    
    
    }
  • 相关阅读:
    UVa 1354 天平难题 (枚举二叉树)
    广西邀请赛总结
    UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
    UVA
    Uva 127 "Accordian" Patience (模拟)
    UVA 10539 Almost Prime Numbers( 素数因子)
    HDU 1272 小希的迷宫(并查集)
    HDU 1213 How Many Tables (并查集)
    POJ 2236 Wireless Network(并查集)
    HDU 1233 还是畅通工程 ( Kruskal或Prim)
  • 原文地址:https://www.cnblogs.com/yoyohong/p/6140366.html
Copyright © 2011-2022 走看看