Android 最火的快速开发框架AndroidAnnotations使用详解

时间 : 15-01-07 栏目 : Android, 移动开发 作者 : noway 评论 : 0 点击 : 443 次

Android 最火的快速开发框架androidannotations配置详解文章中有eclipse配置步骤,Android 最火快速开发框架AndroidAnnotations简介文章中的简单介绍,本篇注重讲解AndroidAnnotations中注解方法的使用。

@EActivity

 

示例:

1
2
3
4
@EActivity(R.layout.main)
public class MyActivity extends Activity {
}

@fragment

示例:

 

1
2
3
<pre class="brush:java;">@EFragment(R.layout.my_fragment_layout)
public class MyFragment extends Fragment {
}</pre>

注册:

 

 

1
<fragment android:id="@+id/myFragment" android:name="com.company.MyFragment_" android:layout_width="fill_parent" android:layout_height="fill_parent"></fragment>

 

创建:

 

1
MyFragment fragment = new MyFragment_();

 

 

普通类:

 

1
2
3
4
@EBean
public class MyClass {
}

 

 

注意:这个类必须仅仅只能有一个构造函数,参数最多有一个context。

Activity中使用:

 

1
2
3
4
5
6
7
@EActivity
public class MyActivity extends Activity {
  @Bean
  MyOtherClass myOtherClass;
}

 

 

也可以用来声明接口:

 

1
2
@Bean(MyImplementation.class)
    MyInterface myInterface;

 

 

在普通类中还可以注入根环境:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@EBean
public class MyClass {
  @RootContext
  Context context;
  // Only injected if the root context is an activity
  @RootContext
  Activity activity;
  // Only injected if the root context is a service
  @RootContext
  Service service;
  // Only injected if the root context is an instance of MyActivity
  @RootContext
  MyActivity myActivity;
}

 

 

如果想在类创建时期做一些操作可以:

 

1
2
3
4
@AfterInject
  public void doSomethingAfterInjection() {
    // notificationManager and dependency are set
  }

 

 

单例类需要如下声明:

 

1
2
3
4
@EBean(scope = Scope.Singleton)
public class MySingleton {
}

 

 

注意:在单例类里面不可以注入view和事件绑定,因为单例的生命周期比Activity和Service的要长,以免发生内存溢出。

@EView

 

1
2
3
4
5
6
7
8
9
10
11
12
13
@EView
public class CustomButton extends Button {
        @App
        MyApplication application;
        @StringRes
        String someStringResource;
    public CustomButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

 

 

注册:

 

1
<com.androidannotations.view.custombutton_ android:layout_width="match_parent" android:layout_height="wrap_content"></com.androidannotations.view.custombutton_>

 

 

创建:

 

1
CustomButton button = CustomButton_.build(context);

 

 

@EViewGroup

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@EViewGroup(R.layout.title_with_subtitle)
public class TitleWithSubtitle extends RelativeLayout {
    @ViewById
    protected TextView title, subtitle;
    public TitleWithSubtitle(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public void setTexts(String titleText, String subTitleText) {
        title.setText(titleText);
        subtitle.setText(subTitleText);
    }
}

 

 

注册:

 

1
<com.androidannotations.viewgroup.titlewithsubtitle_ android:id="@+id/firstTitle" android:layout_width="match_parent" android:layout_height="wrap_content"></com.androidannotations.viewgroup.titlewithsubtitle_>

 

 

@EApplication

 

1
2
3
4
@EApplication
public class MyApplication extends Application {
}

Activity中使用:

1
2
3
4
5
6
7
@EActivity
public class MyActivity extends Activity {
  @App
  MyApplication application;
}

@EService

1
2
3
4
@EService
public class MyService extends Service {
}

跳转service:

1
MyService_.intent(getApplication()).start();

停止service:

1
MyService_.intent(getApplication()).stop();

@EReceiver

1
2
3
4
@EReceiver
public class MyReceiver extends BroadcastReceiver {
}

@Receiver 可以替代声明BroadcastReceiver

1
2
3
4
5
6
7
8
9
@EActivity
public class MyActivity extends Activity {
  @Receiver(actions = "org.androidannotations.ACTION_1")
  protected void onAction1() {
  }
}

@EProvider

1
2
3
4
@EProvider
public class MyContentProvider extends ContentProvider {
}

@ViewById

1
2
3
4
5
6
7
8
9
10
@EActivity
public class MyActivity extends Activity {
  // Injects R.id.myEditText,变量名称必须和布局的id名称一致
  @ViewById
  EditText myEditText;
  @ViewById(R.id.myTextView)
  TextView textView;
}

@AfterViews

1
2
3
4
5
6
7
8
@EActivity(R.layout.main)
public class MyActivity extends Activity {
    @ViewById
    TextView myTextView;
    @AfterViews
    void updateTextWithDate() {<pre class="brush:java;">//一定要在这里进行view的一些设置,不要在oncreate()中设置,因为oncreate()在执行时 view还没有注入</pre>        myTextView.setText("Date: " + new Date());    }[...]

@StringRes

1
2
3
4
5
6
7
8
9
10
@EActivity
public class MyActivity extends Activity {
  @StringRes(R.string.hello)
  String myHelloString;//不能设置成私有变量
  @StringRes
  String hello;
}

@ColorRes

1
2
3
4
5
6
7
8
9
10
@EActivity
public class MyActivity extends Activity {
  @ColorRes(R.color.backgroundColor)
  int someColor;
  @ColorRes
  int backgroundColor;
}

@AnimationRes

1
2
3
4
5
6
7
8
9
10
@EActivity
public class MyActivity extends Activity {
  @AnimationRes(R.anim.fadein)
  XmlResourceParser xmlResAnim;
  @AnimationRes
  Animation fadein;
}

@DimensionRes

1
2
3
4
5
6
7
8
9
10
@EActivity
public class MyActivity extends Activity {
  @DimensionRes(R.dimen.fontsize)
  float fontSizeDimension;
  @DimensionRes
  float fontsize;
}

@DImensionPixelOffsetRes

1
2
3
4
5
6
7
8
9
10
@EActivity
public class MyActivity extends Activity {
  @DimensionPixelOffsetRes(R.string.fontsize)
  int fontSizeDimension;
  @DimensionPixelOffsetRes
  int fontsize;
}

@DimensionPixelSizeRes

1
2
3
4
5
6
7
8
9
10
@EActivity
public class MyActivity extends Activity {
  @DimensionPixelSizeRes(R.string.fontsize)
  int fontSizeDimension;
  @DimensionPixelSizeRes
  int fontsize;
}

其他的Res:

  • @BooleanRes
  • @ColorStateListRes
  • @DrawableRes
  • @IntArrayRes
  • @IntegerRes
  • @LayoutRes
  • @MovieRes
  • @TextRes
  • @TextArrayRes
  • @StringArrayRes
    @Extra

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @EActivity
    public class MyActivity extends Activity {
      @Extra("myStringExtra")
      String myMessage;
      @Extra("myDateExtra")
      Date myDateExtraWithDefaultValue = new Date();
    }

    或者:

    1
    2
    3
    4
    5
    6
    7
    @EActivity
    public class MyActivity extends Activity {
      // The name of the extra will be "myMessage",名字必须一致
      @Extra
      String myMessage;
    }

    传值:

    1
    MyActivity_.intent().myMessage("hello").start() ;

    @SystemService

    1
    2
    3
    4
    5
    6
    @EActivity
    public class MyActivity extends Activity {//
      @SystemService
      NotificationManager notificationManager;
    }

    @HtmlRes

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @EActivity
    public class MyActivity extends Activity {
      // Injects R.string.hello_html
      @HtmlRes(R.string.hello_html)
      Spanned myHelloString;
      // Also injects R.string.hello_html
      @HtmlRes
      CharSequence helloHtml;
    }

    @FromHtml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @EActivity
    public class MyActivity extends Activity {//必须用在TextView
      @ViewById(R.id.my_text_view)
      @FromHtml(R.string.hello_html)
      TextView textView;
      // Injects R.string.hello_html into the R.id.hello_html view
      @ViewById
      @FromHtml
      TextView helloHtml;
    }

    @NonConfigurationInstance

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class MyActivity extends Activity {//等同于 Activity.onRetainNonConfigurationInstance()
      @NonConfigurationInstance
      Bitmap someBitmap;
      @NonConfigurationInstance
      @Bean
      MyBackgroundTask myBackgroundTask;
    }

    @HttpsClient

    1
    2
    <pre class="brush:java;">@HttpsClient
    HttpClient httpsClient;</pre>

    示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    @EActivity
    public class MyActivity extends Activity {
        @HttpsClient(trustStore=R.raw.cacerts,
            trustStorePwd="changeit",
            hostnameVerif=true)
        HttpClient httpsClient;
        @AfterInject
        @Background
        public void securedRequest() {
            try {
                HttpGet httpget = new HttpGet("https://www.verisign.com/");
                HttpResponse response = httpsClient.execute(httpget);
                doSomethingWithResponse(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        @UiThread
        public void doSomethingWithResponse(HttpResponse resp) {
            Toast.makeText(this, "HTTP status " + resp.getStatusLine().getStatusCode(), Toast.LENGTH_LONG).show();
        }
    }

    @FragmentArg

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @EFragment
    public class MyFragment extends Fragment {//等同于 Fragment Argument
      @FragmentArg("myStringArgument")
      String myMessage;
      @FragmentArg
      String anotherStringArgument;
      @FragmentArg("myDateExtra")
      Date myDateArgumentWithDefaultValue = new Date();
    }
    1
    2
    3
    4
    MyFragment myFragment = MyFragment_.builder()
      .myMessage("Hello")
      .anotherStringArgument("World")
      .build();

    @Click

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Click(R.id.myButton)
    void myButtonWasClicked() {
        [...]
    }
    @Click
    void anotherButton() {//如果不指定则函数名和id对应
        [...]
    }
    @Click
    void yetAnotherButton(View clickedView) {
        [...]
    }

    其他点击事件:

    • Clicks with @Click
    • Long clicks with @LongClick
    • Touches with @Touch

      AdapterViewEvents

      • Item clicks with @ItemClick
      • Long item clicks with @ItemLongClick
      • Item selection with @ItemSelect 有两种方式调用: 1.
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        @EActivity(R.layout.my_list)
        public class MyListActivity extends Activity {
            // ...
            @ItemClick
            public void myListItemClicked(MyItem clickedItem) {//MyItem是adapter的实体类,等同于adapter.getItem(position)
            }
            @ItemLongClick
            public void myListItemLongClicked(MyItem clickedItem) {
            }
            @ItemSelect
            public void myListItemSelected(boolean selected, MyItem selectedItem) {
            }
        }

        2.

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        @EActivity(R.layout.my_list)
        public class MyListActivity extends Activity {
            // ...
            @ItemClick
            public void myListItemClicked(int position) {//位置id
            }
            @ItemLongClick
            public void myListItemLongClicked(int position) {
            }
            @ItemSelect
            public void myListItemSelected(boolean selected, int position) {
            }
        }

        @SeekBarProgressChange

        1
        <pre class="brush:java;">//等同于SeekBar.OnSeekBarChangeListener.onProgressChanged(SeekBar, int, boolean)</pre>
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        @SeekBarProgressChange(R.id.seekBar)
         void onProgressChangeOnSeekBar(SeekBar seekBar, int progress, boolean fromUser) {
            // Something Here
         }
         @SeekBarProgressChange(R.id.seekBar)
         void onProgressChangeOnSeekBar(SeekBar seekBar, int progress) {
            // Something Here
         }
         @SeekBarProgressChange({R.id.seekBar1, R.id.seekBar2})
         void onProgressChangeOnSeekBar(SeekBar seekBar) {
            // Something Here
         }
         @SeekBarProgressChange({R.id.seekBar1, R.id.seekBar2})
         void onProgressChangeOnSeekBar() {
            // Something Here
         }@SeekBarTouchStart and @SeekBarTouchStop

        @SeekBarTouchStart 和 @SeekBarTouchStop 接受开始和结束事件的监听
        @TextChange

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        @TextChange(R.id.helloTextView)
         void onTextChangesOnHelloTextView(CharSequence text, TextView hello, int before, int start, int count) {
            // Something Here
         }
         @TextChange
         void helloTextViewTextChanged(TextView hello) {
            // Something Here
         }
         @TextChange({R.id.editText, R.id.helloTextView})
         void onTextChangesOnSomeTextViews(TextView tv, CharSequence text) {
            // Something Here
         }
         @TextChange(R.id.helloTextView)
         void onTextChangesOnHelloTextView() {
            // Something Here
         }

        @BeforeTextChange

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        @BeforeTextChange(R.id.helloTextView)
         void beforeTextChangedOnHelloTextView(TextView hello, CharSequence text, int start, int count, int after) {
            // Something Here
         }
         @BeforeTextChange
         void helloTextViewBeforeTextChanged(TextView hello) {
            // Something Here
         }
         @BeforeTextChange({R.id.editText, R.id.helloTextView})
         void beforeTextChangedOnSomeTextViews(TextView tv, CharSequence text) {
            // Something Here
         }
         @BeforeTextChange(R.id.helloTextView)
         void beforeTextChangedOnHelloTextView() {
            // Something Here
         }

        @AfterTextChange

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        @AfterTextChange(R.id.helloTextView)
         void afterTextChangedOnHelloTextView(Editable text, TextView hello) {
            // Something Here
         }
         @AfterTextChange
         void helloTextViewAfterTextChanged(TextView hello) {
            // Something Here
         }
         @AfterTextChange({R.id.editText, R.id.helloTextView})
         void afterTextChangedOnSomeTextViews(TextView tv, Editable text) {
            // Something Here
         }
         @AfterTextChange(R.id.helloTextView)
         void afterTextChangedOnHelloTextView() {
            // Something Here
         }

        @OptionsMenu和OptionsItem

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        @EActivity
        @OptionsMenu(R.menu.my_menu)
        public class MyActivity extends Activity {
            @OptionMenuItem
            MenuItem menuSearch;
            @OptionsItem(R.id.menuShare)
                void myMethod() {
                  // You can specify the ID in the annotation, or use the naming convention
                }
            @OptionsItem
            void homeSelected() {
              // home was selected in the action bar
                  // The "Selected" keyword is optional
            }
            @OptionsItem
            boolean menuSearch() {
                  menuSearch.setVisible(false);
                  // menuSearch was selected
                  // the return type may be void or boolean (false to allow normal menu processing to proceed, true to consume it here)
                  return true;
            }
            @OptionsItem({ R.id.menu_search, R.id.menu_delete })
            void multipleMenuItems() {
              // You can specify multiple menu item IDs in @OptionsItem
            }
            @OptionsItem
            void menu_add(MenuItem item) {
              // You can add a MenuItem parameter to access it
            }
        }

        或者:

        1
        2
        3
        4
        5
        @EActivity
        @OptionsMenu({R.menu.my_menu1, R.menu.my_menu2})
        public class MyActivity extends Activity {
        }

        @Background 执行:

        1
        2
        3
        4
        5
        6
        7
        8
        void myMethod() {
            someBackgroundWork("hello", 42);
        }
        @Background
        void someBackgroundWork(String aParam, long anotherParam) {
            [...]
        }

        取消:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        void myMethod() {
            someCancellableBackground("hello", 42);
            [...]
            boolean mayInterruptIfRunning = true;
            BackgroundExecutor.cancelAll("cancellable_task", mayInterruptIfRunning);
        }
        @Background(id="cancellable_task")
        void someCancellableBackground(String aParam, long anotherParam) {
            [...]
        }

        非并发执行:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        void myMethod() {
            for (int i = 0; i < 10; i++)
                someSequentialBackgroundMethod(i);
        }
        @Background(serial = "test")
        void someSequentialBackgroundMethod(int i) {
            SystemClock.sleep(new Random().nextInt(2000)+1000);
            Log.d("AA", "value : " + i);
        }

        延迟:

        1
        2
        3
        @Background(delay=2000)
        void doInBackgroundAfterTwoSeconds() {
        }

        @UiThread UI线程:

        1
        2
        3
        4
        5
        6
        7
        8
        void myMethod() {
            doInUiThread("hello", 42);
        }
        @UiThread
        void doInUiThread(String aParam, long anotherParam) {
            [...]
        }

        延迟:

        1
        2
        3
        @UiThread(delay=2000)
        void doInUiThreadAfterTwoSeconds() {
        }

        优化UI线程:

        1
        2
        3
        @UiThread(propagation = Propagation.REUSE)
        void runInSameThreadIfOnUiThread() {
        }

        进度值改变:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        @EActivity
        public class MyActivity extends Activity {
          @Background
          void doSomeStuffInBackground() {
            publishProgress(0);
            // Do some stuff
            publishProgress(10);
            // Do some stuff
            publishProgress(100);
          }
          @UiThread
          void publishProgress(int progress) {
            // Update progress views
          }
        }

        @OnActivityResult

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        @OnActivityResult(REQUEST_CODE)
         void onResult(int resultCode, Intent data) {
         }
         @OnActivityResult(REQUEST_CODE)
         void onResult(int resultCode) {
         }
         @OnActivityResult(ANOTHER_REQUEST_CODE)
         void onResult(Intent data) {
         }
         @OnActivityResult(ANOTHER_REQUEST_CODE)
         void onResult() {
         }

        以上的注释用法基本包含了平常程序中的事件绑定,用AndroidAnnotations框架可以专注于做逻辑开发,最主要是简化代码编写,容易维护。 如有问题可以参考官方文档https://github.com/excilys/androidannotations/wiki/Cookbook, 或者留言。转载务必注明出处。

本文标签

除非注明,文章均为( noway )原创,转载请保留链接: http://blog-old.z3a105.com/?p=396

Android 最火的快速开发框架AndroidAnnotations使用详解:等您坐沙发呢!

发表评论





       ==QQ:122320466==

 微信    QQ群


0

Aujourd’hui, une partie avec le développement du e-commerce, achats en ligne est devenu une partie de la vie pour beaucoup de gens. La mariage a commencé achats en ligne. Si vous choisissez achats les mariages en ligne, il peut être beaucoup moins cher que le salon de la Robe de mariée pas chermariée local, réduisant le budget de mariage. vous pouvez avoir beaucoup de choix si acheter de mariage en ligne. vous pouvez ramasser une robe de mariée bon marché sur Internet.
Piercing fascinerande figur, och nu tittar vi på 2016 senast brudklänning, kan du vara den vackraste bruden det!2016 senaste Bra brudklänning, söt temperament Bra design, romantiska spetsar blomma kjol, som du lägger till en elegant och charmig temperament.Kvinnan tillbaka mjuka linjer, människor brudklänningofta få en känsla av oändlig frestelse. Fall 2016 mässan, lämnar uppgifter om ditt bröllop charmig.
Yesterday afternoon, the Chinese team was training in the Guangzhou Gymnasium, when the reporter asked Zhao Yunlei the feeling of wearing the new cheap jersey , cheap jerseys online shopshe readily took a shirt from the bag crumpled ball to reporters, and she said with a smile: ” This shirt is light. ”Zhao Yunlei said: “Our material is very light like with the clothes of the tennis King Nadal, Federer, after the sweat, sweat does not drip down to the ground, when we do move, it is easy pace slipping if the sweat drip on the floor.”Tennis players Zhang Yawen, told reporters: “You might think the clothes attached to the body, fearing we swing will be affected, in fact, we do not feel anything, because the clothes are very light, very soft, put on quite comfortable. And it’s particularly good clothes to dry, washing and will dry in 15 minutes. ”
China’s sports enthusiasts NFL sweatshirt with mad love and the pursuit of, and therefore, NFL jerseys have a good market in China and development. China is a populous country, is the consumer, the economic momentum is so good, the sales prospects sportswear is immeasurable. With hot sales sweatshirt, but also to promote the importance of sports fans, on health, on the other hand is a matter of concern for the World Cup, fans wearing NFL jerseys and also can express themselves more fully love and obsession Therefore, NFL jerseys Wholesale jerseys online shopwholesale has good prospects and development in China.
ANTA-ANTA Sports Products Limited, referred to as ANTA Sports, Anta, is China’s leading sporting goods companies, mainly engaged in the design, development, manufacture and marketing of ANTA brand sporting goods, including sports footwear, apparel and accessories. Anta sweatshirt design advantages, warm stretch knit fabric, using Slim version of model, more personal fit, bid farewell to bloated, so wearing more stylish.GUIRENNIAO-This logo is a spiritual totem, smooth graphics implication unstoppable force; flexible deliver an elegant arc Wholesale jerseys china shop movement, strength and speed of the United States, a symbol of passion and rationality publicity “Heart” and “meaning”, “concept” unity; pass the fearless and enterprising mind, showing beyond the realm of self, to unstoppable force to create the future.XTEP-Xtep (China) Co., Ltd. is a comprehensive development wholesale jerseys china shop, production and marketing of Xtep brand (XTEP) sports shoes, clothing, bags, caps, balls, socks mainly large sporting goods industry enterprises.
There are a lot of fans in identifying the authenticity of the above cheap jerseys have great distress, so here to i will show you some methods to definitely affordable inexpensive cheap jerseys : Firstly, we should look at if it is working fine. China has been called the world’s factory, a lot cheap jerseys factories in China have foundries, but our cheap jerseys are all from here! Secondly, should to see whether it is the , we all know that it is difficult to get out of print once a genuine cheap cheap jerseys free shipping jersey was print. and we have all kind of stocka on the whole website, in other words, we have all you want ! Finally, look at the price, our price is not necessarily the lowest in the whole website but it must be most fair on the whole website, we certainly you will not regret later when you buy it. Of course, except that cheap jerseys, we also have the other products, such as socks, leggings and some other related products, everyone can enjoy the best services of here!

KUBET