Android annotations框架使用 中文详解

GitHub参考地址:

源码:https://github.com/excilys/androidannotations

Documents:https://github.com/excilys/androidannotations/wiki

在文档页右侧,有关于Annotations的信息入口:


Get Started 相关配置,Download 源码下载,Cookbook 注解使用文档, Examples 官方Demo

Apps using AndroidAnnotations 上线产品案例

简介

AndroidAnnotations is an Open Source framework that speeds up Android development. It takes care of the plumbing, and lets you concentrate on what's really important. By simplifying your code, it facilitates its maintenance.

如上英文简介,AndroidAnnotations是一个能够加速Android开发的开源框架。它负责管道,让开发者专注于真正重要的事情上。通过建华代码,它能够便于维护!

HowItWorks(必读)https://github.com/excilys/androidannotations/wiki/HowItWorks

使用前后对比案例:

Before

public class BookmarksToClipboardActivity extends Activity {

	BookmarkAdapter adapter;

	ListView bookmarkList;

	EditText search;

	BookmarkApplication application;

	Animation fadeIn;

	ClipboardManager clipboardManager;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN);

		setContentView(R.layout.bookmarks);

		bookmarkList = (ListView) findViewById(R.id.bookmarkList);
		search = (EditText) findViewById(R.id.search);
		application = (BookmarkApplication) getApplication();
		fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in);
		clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

		View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1);
		updateBookmarksButton1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				updateBookmarksClicked();
			}
		});

		View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2);
		updateBookmarksButton2.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				updateBookmarksClicked();
			}
		});

		bookmarkList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> p, View v, int pos, long id) {
				Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(
						pos);
				bookmarkListItemClicked(selectedBookmark);
			}
		});

		initBookmarkList();
	}

	void initBookmarkList() {
		adapter = new BookmarkAdapter(this);
		bookmarkList.setAdapter(adapter);
	}

	void updateBookmarksClicked() {
		UpdateBookmarksTask task = new UpdateBookmarksTask();

		task.execute(search.getText().toString(), application.getUserId());
	}

	private static final String BOOKMARK_URL = //
	"http://www.bookmarks.com/bookmarks/{userId}?search={search}";

	class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> {

		@Override
		protected Bookmarks doInBackground(String... params) {
			String searchString = params[0];
			String userId = params[1];

			RestTemplate client = new RestTemplate();
			HashMap<String, Object> args = new HashMap<String, Object>();
			args.put("search", searchString);
			args.put("userId", userId);
			HttpHeaders httpHeaders = new HttpHeaders();
			HttpEntity<Bookmarks> request = new HttpEntity<Bookmarks>(
					httpHeaders);
			ResponseEntity<Bookmarks> response = client.exchange(
					//
					BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class,
					args);
			Bookmarks bookmarks = response.getBody();

			return bookmarks;
		}

		@Override
		protected void onPostExecute(Bookmarks result) {
			adapter.updateBookmarks(result);
			bookmarkList.startAnimation(fadeIn);
		}

	}

	void bookmarkListItemClicked(Bookmark selectedBookmark) {
		clipboardManager.setText(selectedBookmark.getUrl());
	}

}

After

@NoTitle
@Fullscreen
@EActivity(R.layout.bookmarks)
public class BookmarksToClipboardActivity extends Activity {

	BookmarkAdapter adapter;

	@ViewById
	ListView bookmarkList;

	@ViewById
	EditText search;

	@App
	BookmarkApplication application;

	@RestService
	BookmarkClient restClient;

	@AnimationRes
	Animation fadeIn;

	@SystemService
	ClipboardManager clipboardManager;

	@AfterViews
	void initBookmarkList() {
		adapter = new BookmarkAdapter(this);
		bookmarkList.setAdapter(adapter);
	}

	@Click({ R.id.updateBookmarksButton1, R.id.updateBookmarksButton2 })
	void updateBookmarksClicked() {
		searchAsync(search.getText().toString(), application.getUserId());
	}

	@Background
	void searchAsync(String searchString, String userId) {
		Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
		updateBookmarks(bookmarks);
	}

	@UiThread
	void updateBookmarks(Bookmarks bookmarks) {
		adapter.updateBookmarks(bookmarks);
		bookmarkList.startAnimation(fadeIn);
	}

	@ItemClick
	void bookmarkListItemClicked(Bookmark selectedBookmark) {
		clipboardManager.setText(selectedBookmark.getUrl());
	}

}

@Rest("http://www.bookmarks.com")
public interface BookmarkClient {

	@Get("/bookmarks/{userId}?search={search}")
	Bookmarks getBookmarks(String search, String userId);

}




Eclipse使用配置

官网下载压缩文件,解包可以得到两个Jar包文件:

androidannotations-xxx.jar、androidannotations-api-xxx.jar(作者当前使用3.2版本)

在自己的Android Project中,将aa-api-xxx.jar文件放入libs文件夹下,并右键Jar文件--->Build Path--->Add to Build Path(也可以这样添加:

右键Project--->Java Build Path--->Libraries--->Add JARs)

注意:aa-xxx.jar文件不可以放入libs文件夹下,需新建一个目录,如compile-libs。

然后,设置Project ---> Properties:

Java Compiler : Compiler compliance level确保是1.6

Java Compiler | Annotation Processing : 选中 Enabled annontation processing (需要先选中 Enable project specific settings)

Java Compiler | Annotation Processing | Factory Path : 点击Add JARs,添加aa-xxx.jar文件,设置完成!



特别说明:

1. 通过@EActivity注解的Activity,在AndroidManifest.xml注册时,需要在Activity Name后面添加 _ 符号,如:

<activity android:name=".MyListActivity_" />

在代码中使用时,也需要使用MyListActivity_.class,否则通过startActivity启动MyListActivity.class会报Manifest.xml

没有注册的错误。见官方说明:

AndroidAnnotations works in a very simple way. It automatically adds an extra compilation step that generates source code, using the standard Java Annotation Processing Tool.

What source code ? For each enhanced class, for example each @EActivity annotated activity, a subclass of this activity is generated, with the same name plus an underscore appended at the end.

For instance, the following class:

package com.some.company;
@EActivity
public class MyActivity extends Activity {
  // ...
}

Will generate the following subclass, in the same package but in another source folder:

package com.some.company;
public final class MyActivity_ extends MyActivity {
  // ...
}

This subclass adds behavior to your activity by overriding some methods (for instanceonCreate()), yet delegating the calls to super.

That is the reason why you must add _ to your activity names in AndroidManifest.xml:

<activity android:name=".MyListActivity_" />

2. 待补充。。。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值