EasyAnnotation框架用法介绍

·  阅读 1020

如何成为T型人才,垂直在一个行业中,必须要有一整套知识体系,在这里,就一个字坚持~

前言

EasyAnnotation框架使用编译时注解,解决项目重复功能代码编码,通过注APT技术生成样板代码,在通过注解进行注入,提高开发效率。该框架主要功能模块:1、对象工厂模式实例化。2、界面跳转。3、控件绑定、事件绑定功能。

Contents

一、功能介绍

注解描述
@BindView指定控件绑定
@OnClick指定事件绑定
@IntentField指定Activity跳转时,Binder数据传输参数(范围:成员变量)
@IntentParameter指定Activity跳转时,Binder数据传输参数(范围:方法形参)
@IntentMethod指定Activity跳转目标类名
@ObjectFactory指定生成对象工厂类

1.1、使用数据绑定功能

  1. 初始化注解,需要在Activity初始化方法onCreate,调用AnnotationUtils.bind(this)进行注入。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_three);
         AnnotationUtils.bind(this);
    }
    复制代码
  2. View控件绑定使用@BindView(id)注入。

    @BindView(R.id.mTvTitle)
    public TextView mTvTitle;
    复制代码
  3. View控件事件绑定使用@OnClick([id])注入。

    @OnClick({R.id.mBtSubmit})
    public void onClick(View view){
       if(view.getId()==R.id.mBtSubmit){
           Toast.makeText(this,"点击了",Toast.LENGTH_SHORT).show();
       }
    }
    复制代码

1.2、使用Activity之间跳转功能

1.2.1、使用成员变量设置Activity中binder参数,@IntentField(目标Activity类名)、@IntentMethod(目标Activity类名)
  1. Activity传递数据,并进行跳转。

    public class OneActivity extends AppCompatActivity {
        @IntentField("TwoActivity")
         String title = "OneActivity";
    
        @IntentField("TwoActivity")
         UserInfo userInfo;
        
         @IntentMethod("TwoActivity")
         public void jumpOneToTwoActivity() {
              userInfo = new UserInfo("username", "password");
              new TwoActivity$Jump().jumpActivity(OneActivity.this, title, userInfo);
         }
    
    }
    复制代码
  2. Activity接收数据。

    public class TwoActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_two);
            initData();
            initView();
        }
    
        /**
         * 获取数据
         */
        private void initData() {
            TwoActivity$Init activity = (TwoActivity$Init)
                    new TwoActivity$Init().initActivity(this);
            String title = activity.title;
            UserInfo userInfo = activity.userInfo;
            Toast.makeText(this, "title=" + title + ";username=" +
                            userInfo.username + ";password" + userInfo.password,
                    Toast.LENGTH_LONG).show();
        }
     }
    复制代码
1.2.2、使用方法形参设置Activity中binder参数,@IntentParameter(目标Activity类名)、@IntentMethod(目标Activity类名)
  1. Activity传递数据,并进行跳转。

    @IntentMethod("MainActivity")
    public void jumpOneToMainActivity(
    									@IntentParameter("MainActivity") String name,
                                        @IntentParameter("MainActivity") int count,
                                        String title) {
            new MainActivity$Jump().jumpActivity(OneActivity.this, name, count);
        }
    复制代码
  2. Activity接收数据。

    private void initData() {
            MainActivity$Init activity = (MainActivity$Init)
                    new MainActivity$Init().initActivity(this, 0);
            int count = activity.count;
            String name = activity.name;
            Toast.makeText(this,
                    "count=" + count + ";name=" + name, Toast.LENGTH_SHORT).show();
        }
    复制代码

1.3、使用生成对象工厂类

  1. @ObjectFactory(type=工厂类,key="类标识"),生成实例化对象。

    public abstract class BaseFragment extends Fragment {
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View rootView = inflater.inflate(getLayoutId(), null);
            return rootView;
        }
    
        public abstract int getLayoutId();
    }
    复制代码
    @ObjectFactory(type = BaseFragment.class, key = "Home")
    public class HomeFragment extends BaseFragment {
        @Override
        public int getLayoutId() {
            return R.layout.fragment_home;
        }
    }
    复制代码
  2. 通过标识获取实例化对象。

    private void initView() {
            HomeFragment main = (HomeFragment)
                    new BaseFragment$Factory().objectFactory("Home");
    }
    复制代码

About me

分类:
Android
分类:
Android