Fragment, Activity传值的注解组件

来源:互联网 发布:李鹤年 书法 知乎 编辑:程序博客网 时间:2024/06/18 17:33
都是编译时注解,而没有采用反射,不用担心性能问题

IntentBuilder

@IntentBuilderclass DetailActivity extends Activity {    @Extra    String id;    @Extra @Nullable    String title;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        DetailActivityIntentBuilder.inject(getIntent(), this);        // TODO use id and title    }startActivity(new DetailActivityIntentBuilder("12345")    .title("MyTitle")    .build(context))}
@IntentBuilderclass DownloadService extends IntentService {    @Extra    String downloadUrl;    @Override    protected void onHandleIntent(Intent intent) {        MyServiceIntentBuilder.inject(intent, this);    }}startService(new DownloadServiceIntentBuilder("http://google.com").build(context))

OnActivityResult

@Overrideprotected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {    super.onActivityResult(requestCode, resultCode, data);    ActivityResult.onResult(requestCode, resultCode, data).into(this);}
@OnActivityResult(requestCode = 33)void onActivityResultTestActivity() { /* Do something */ }@OnActivityResult(requestCode = 1, resultCodes = { Activity.RESULT_OK })void onActivityResultActivityOk() { /* Only do something when ok */ }@OnActivityResult(requestCode = 1, resultCodes = { Activity.RESULT_CANCELED })void onActivityResultActivityCanceled() { /* Only do something when canceled */ }@OnActivityResult(requestCode = 2)void onActivityResultPickImage(final int resultCode, final Intent intent) { /* Do something */ }

支持各种参数

  • none
  • int
  • Intent
  • int, Intent
  • Intent, int

    每个注解的方法只能有一个int和/或意图变量

FragmentArgs

@FragmentWithArgspublic class MyOptionalFragment extends Fragment {    @Arg    int id;    @Arg    String title;    @Arg(required = false)     String additionalText;    @Arg(required = false)    float factor;    @Arg(required = false)    int mFeatureId;    @Override    public void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        FragmentArgs.inject(this); // read @Arg fields    }}
public class MyActivity extends Activity {    public void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        int id = 123;        String title = "test";        // Using the generated Builder        Fragment fragment =             new MyFragmentBuilder(id, title) // required args            .additionalText("foo")     // Optional arg            .factor(1.2f)            // Optional arg            .featureId(42)            // Optional arg            .build();        // Fragment Transaction        getFragmentManager()            .beginTransaction()            .replace(R.id.container, fragment)            .commit();    }}


文/youmu178(简书作者)
原文链接:http://www.jianshu.com/p/d57c8ce3d1e5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
原创粉丝点击