android反射传参数,注解&反射Android-Activity间传值

通过注解&反射实现Android两个Activity间传值,不在Activity中使用getXXXExtra()

1.在Activity中的应用

//传值Activity

public class RejectFirstActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_reject_first);

Intent intent = new Intent(this, RejectSecondActivity.class);

intent.putExtra("name", "Jake");

intent.putExtra("num", 1);

intent.putExtra("contain", true);

startActivity(intent);

}

}

//接收Activity

public class RejectSecondActivity extends AppCompatActivity {

//不设定注解值,直接通过属性名获取

@AutoWired

private String name;

@AutoWired(value = "num")

private int num;

//注解值和属性名不一样,去掉注解,将得到默认值false

@AutoWired(value = "contain")

private boolean contained;

private static final String TAG = "feng";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_reject_second);

InjectUtils.injectExtra(this);

Log.d(TAG, "onCreate: name = " + name);

Log.d(TAG, "onCreate: num = " + num);

Log.d(TAG, "onCreate: contained = " + contained);

}

}

2.注解

@Target({ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

public @interface AutoWired {

String value() default "";

}

3.反射

public class InjectUtils {

public static void injectExtra(Activity activity) {

Class extends Activity> clazz = activity.getClass();

Field[] declaredFields = clazz.getDeclaredFields();

for (Field field : declaredFields) {

if (field.isAnnotationPresent(AutoWired.class)) {

AutoWired annotation = field.getAnnotation(AutoWired.class);

String value = annotation.value();

if (value == null || "".equals(value)) {

value = field.getName();

}

Object result = null;

Class> type = field.getType();

if (type == String.class) {

result = activity.getIntent().getStringExtra(value);

} else if (type == int.class || type == Integer.class) {

result = activity.getIntent().getIntExtra(value, 0);

} else if (type == boolean.class || type == Boolean.class) {

result = activity.getIntent().getBooleanExtra(value, false);

} else {

//Todo 其他类型,暂不处理

}

field.setAccessible(true);

try {

field.set(activity, result);

} catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

}

}

本文分享 CNBlog - 黑冰台。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值