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

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

示例代码

@EFragment
public class LoaderFragment extends Fragment {
	
	@UiThread
    @IgnoredWhenDetached
    void killActivity() {
        getActivity().finish();
    }

    @IgnoredWhenDetached
    void updateTitle(String title) {
        getActivity().setTitle(title);
    }
    
    @UiThread
    void test(){
    	
    }

}


@HierarchyViewerSupport

引入 Hierarchy Viewer 支持

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

@HierarchyViewerSupport
@EActivity
public 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

该@Trace注释允许您通过写日志条目来跟踪方法的执行。
该方法不能是私有的。

示例代码

@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: 0
01-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

你可能感兴趣的:(java,android,Annotations)