AndroidAnnotations框架@Ebean,@RootContext,@Background,@UiThread,@AfterInject,@AfterTextChange标签的使用方法

使用@EBean的JavaBean,能直接取到调用他的Context,支持@ViewById标签找到控件,因此,构造方法传过来的参数可以少很多。
上代码:


package com.example.androidannotations;

import android.content.Context;
import android.widget.TextView;
import android.widget.Toast;

import com.googlecode.androidannotations.annotations.AfterInject;
import com.googlecode.androidannotations.annotations.Background;
import com.googlecode.androidannotations.annotations.EBean;
import com.googlecode.androidannotations.annotations.RootContext;
import com.googlecode.androidannotations.annotations.UiThread;
import com.googlecode.androidannotations.annotations.ViewById;

@EBean
public class Student {
	//RootContext能取到调用该Bean的Context,构造方法不再需要传Context参数
	@RootContext
	Context context;
	@RootContext
	MainActivity activity;
	//ViewById也能在这里直接使用
	@ViewById
	TextView tv;
	public void Toast()
	{
		Toast.makeText(context, "在Ebean中调用", Toast.LENGTH_LONG).show();
	}
	//后台线程执行
	@Background
	public void backThread()
	{
		for(int i=0;i<9999;i++)
		{
			try {
				Thread.sleep(1000);
//				activity.updateTv(i);
				//更新UI,调用在UI线程执行的方法
				updateTv(i);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
	//UiThread在UI线程执行
	@UiThread
	public void updateTv(int i)
	{
		tv.setText(String.valueOf(i));
	}
	//AfterInject在构造方法执行完成后执行
	@AfterInject
	public void doSomethingAfterInject()
	{
		System.out.println("Student AfterInject");
	}

}

在Activity中的调用方法:


package com.example.androidannotations;

import android.app.Activity;
import android.text.Editable;
import android.widget.EditText;
import android.widget.TextView;

import com.googlecode.androidannotations.annotations.AfterTextChange;
import com.googlecode.androidannotations.annotations.AfterViews;
import com.googlecode.androidannotations.annotations.Bean;
import com.googlecode.androidannotations.annotations.Click;
import com.googlecode.androidannotations.annotations.EActivity;
import com.googlecode.androidannotations.annotations.Fullscreen;
import com.googlecode.androidannotations.annotations.NoTitle;
import com.googlecode.androidannotations.annotations.UiThread;
import com.googlecode.androidannotations.annotations.ViewById;
import com.googlecode.androidannotations.annotations.res.StringRes;

//Eactivity注释可以设置Layout,相当于setConentView方法
@EActivity(R.layout.activity_main)
@Fullscreen
@NoTitle
public class MainActivity extends Activity {
	//ViewById注释功能与findViewById相同,如果声明的变量名就是id,可以省去参数,否则应加上id,如ViewById(R.id.tv)
	
	@ViewById
	TextView tv;
	@ViewById
	EditText edit;
	@StringRes(R.string.hello_world)
	String hello;
	//需要使用@Bean标签
	@Bean
	Student stu;
	//AfterViews注释定义的方法会在OnCreate方法的setContentView后执行
	@AfterViews
	void init()
	{
		tv.setText("asfsdf");
	}
	//在EditText内容改变时,更新TextView内容
	@AfterTextChange(R.id.edit)
	void afterEditChange(Editable text, TextView hello)
	{
		tv.setText(hello.getText());
	}
	//点击TextView时调用
	@Click(R.id.tv)
	void tvClicked()
	{
		stu.Toast();
		stu.backThread();
	}
	//在stu中也可以回调这个方法来更新UI
	@UiThread
	public void updateTv(int i)
	{
		tv.setText(String.valueOf(i));
	}

	
}

© 2012, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记