AndroidAnnotations学习笔记(七)

[size=large][color=red][b]@InstanceState[/b][/color][/size]

在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;
}


[size=large][color=red][b]@WindowFeature[/b][/color][/size]

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

示例代码


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


[size=large][color=red][b]@NoTitle[/b][/color][/size]

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

[size=large][color=red][b]@Fullscreen[/b][/color][/size]

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

示例代码


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


[size=large][color=red][b]@CustomTitle[/b][/color][/size]

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


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


[size=large][color=red][b]@WakeLock[/b][/color][/size]

简易的获取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" />


[size=large][color=red][b]@IgnoredWhenDetached[/b][/color][/size]

在@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(){

}

}


[size=large][color=red][b]@HierarchyViewerSupport[/b][/color][/size]

引入 Hierarchy Viewer 支持

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


@HierarchyViewerSupport
@EActivity
public class MyActivity extends Activity {

}



[size=large][color=red][b]@OnActivityResult[/b][/color][/size]

在没有这个注解之前,我们接收一个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

[size=large][color=red][b]@Transactional[/b][/color][/size]

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

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

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

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

使用示例:


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

@Transactional
void doSomeDbWork(SQLiteDatabase db) {
db.execSQL("Some SQL");
}
}


[size=large][color=red][b]@Trace[/b][/color][/size]

该@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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值