当前位置: 代码迷 >> Android >> AndroidAnnotations学习笔记(7)
  详细解决方案

AndroidAnnotations学习笔记(7)

热度:19   发布时间:2016-04-28 02:30:44.0
AndroidAnnotations学习笔记(七)
@InstanceState

在onSaveInstanceState(Bundle)里保存值,在onCreate(Bundle)中读取值。

原来代码我们这样写

@EActivity(R.layout.activity_test)public class TestActivity extends Activity {		int tesa;		@Override	public void onSaveInstanceState(Bundle bundle) {		super.onSaveInstanceState(bundle);		bundle.putInt("tesa", tesa);	}		public void onCreate(Bundle savedInstanceState) 	{		restoreSavedInstanceState_(savedInstanceState);	}	private void restoreSavedInstanceState_(Bundle savedInstanceState) {		if (savedInstanceState == null) {			return ;		}		tesa = savedInstanceState.getInt("tesa");	}}


现在代码这样写就可以了

@EActivity(R.layout.activity_test)public class TestActivity extends Activity {		@InstanceState	int tesa;}


@WindowFeature

你可以用 @WindowFeature 自定义 activity 窗口的功能。标注值允许有一个或多个。

示例代码

@WindowFeature({ Window.FEATURE_NO_TITLE, Window.FEATURE_INDETERMINATE_PROGRESS })@EActivity(R.layout.activity_test)public class TestActivity extends Activity {}


@NoTitle

这个是说明窗口没有Title,在3.0之后就不能用了。3.0以后用上面那个注解就可以实现了

@Fullscreen

这个说明窗口是一个全屏窗口

示例代码

@Fullscreen@EActivity(R.layout.activity_test)public class TestActivity extends Activity {}


@CustomTitle

这个注解将窗口设置为 window.feature_custom_title 这样窗口类型,并将其设置为指定的布局ID。

@CustomTitle(R.layout.custom_title)@EActivity(R.layout.activity_test)public class TestActivity extends Activity {}


@WakeLock

简易的获取WakeLock的方法

@CustomTitle(R.layout.custom_title)@EActivity(R.layout.activity_test)public class TestActivity extends Activity {	@WakeLock(tag = "MyTag", level = WakeLock.Level.FULL_WAKE_LOCK, flags = WakeLock.Flag.ACQUIRE_CAUSES_WAKEUP)	void methodWithWakeLock(String aParam, long anotherParam) {    		[...]	}}


使用这个注解要是AndroidManifest.xml文件中增加下面的权限

<uses-permission android:name="android.permission.WAKE_LOCK" />


@IgnoredWhenDetached

[email protected][email protected] 或 @Background  注解时,加上这个注解如判读父activity 是否存在。
应使用的方法,必须满足以下条件:
[email protected] 中使用
注解的方法返回值必须void,可以包含参数。
注解的方法返回值必须void,可以包含参数。

示例代码

@EFragmentpublic class LoaderFragment extends Fragment {		@UiThread    @IgnoredWhenDetached    void killActivity() {        getActivity().finish();    }    @IgnoredWhenDetached    void updateTitle(String title) {        getActivity().setTitle(title);    }        @UiThread    void test(){    	    }}


@HierarchyViewerSupport

引入 Hierarchy Viewer 支持

[email protected] 注解允许你在任何设备上使用 Hierarchy Viewer 检查工具。
使用此批注,您的应用程序必须在 AndroidManifest.xml 文件中设置 INTERNET 权限 和 android:debuggable 为 true。
请注意,使用非常简单,[email protected]

@HierarchyViewerSupport@EActivitypublic class MyActivity extends Activity {}



@OnActivityResult

在没有这个注解之前,我们接收一个Activity的返回值时,要这么写代码

@EActivity(R.layout.activity_test)public class TestActivity extends Activity {		protected void onActivityResult(int requestCode, int resultCode, Intent data)	{		//可以根据多个请求代码来作相应的操作		if(100==requestCode)		{			String bookname=data.getExtras().getString("bookname");			String booksale=data.getExtras().getString("booksale");			Toast.makeText(this, "名称:"+bookname+"价格+booksale+"元", Toast.LENGTH_LONG).show();		}		super.onActivityResult(requestCode, resultCode, data);	}}


有了这个标注后,我们可以这样写

@EActivity(R.layout.activity_test)public class TestActivity extends Activity {		@OnActivityResult(100)	void onResult(@Extra String bookname, @Extra String booksale) {		Toast.makeText(this, "名称:"+bookname+"价格"+booksale+"元", Toast.LENGTH_LONG).show();	}}


该方法可以有多个参数:

Activity 返回的数据
int或java.lang.Integer中得到resultCode

@Transactional

@Transactional注解表明一个Activity的方法是事务性的,因此,在执行该方法之前,事务将被启动,并随后提交。

如果方法抛出 RuntimeException ,该交易将回滚。

该方法必须具有至少一个参数,它必须是一个SQLiteDatabase。

该方法不能是私有的,抛出其他异常。

使用示例:

@EActivity(R.layout.activity_test)public class TestActivity extends Activity {		@Transactional	void doSomeDbWork(SQLiteDatabase db) {		db.execSQL("Some SQL");	}}


@Trace

[email protected]?行。
该方法不能是私有的。

示例代码

@EActivity(R.layout.activity_test)public class TestActivity extends Activity {		@Click(R.id.bt_one)	@Trace(tag="CustomTag", level=Log.WARN)	void c(){		tesa = 123456;		ttt(123,"456");	}		@Trace	void ttt(int a, String b){			}}


当然,也可以在这个注解中设置参数。

运行这种程序,点击bt_one这个按键,出打印出如下信息:

01-29 15:01:03.254: W/CustomTag(2350): Entering [void c()]01-29 15:01:03.254: I/TestActivity(2350): Entering [void ttt(a = 123, b = 456)]01-29 15:01:03.254: I/TestActivity(2350): Exiting [void ttt(int, String)], duration in ms: 001-29 15:01:03.254: W/CustomTag(2350): Exiting [void c()], duration in ms: 2


你要在你的程序中使用这个注解,还要进行如下设置

收eclipse 为例:Project Properties > Java Compiler > Annotation Processing > Processor options > 新建一个 key 为trace, value 为 false
  相关解决方案