• [android]AndroidInject框架——我的第一个android小型框架


    作为一个移动应用开发者,随着需求的日益增多,Android项目的越来越臃肿,代码量越来越大,

    现在冷静下来回头看看我们的代码,有多少代码跟业务逻辑没什么关系的

    所以,本人自不量力,在github上建了个开源项目,希望能一定程度地简化我的代码-。-

    现在第一个版本完成,希望有兴趣的朋友能加入一起完善。

    本人才疏学浅,代码中有写得不妥的地方希望大家不吝赐教哈!

    github地址:

    https://github.com/wangjiegulu/androidInject

    androidInject_1.0.jar:

    http://pan.baidu.com/s/1rcSiy

    主要的思想就是通过注解的方式,把我们要做的事情直接注入进来给我们,“不是我去调用对象,而是对象自己来找我”

    现在刚写完了10个注解:

    @AINoTitle, @AIFullScreen, @AILayout, @AIView, @AIBean, @AISystemService, @AIClick, @AIItemClick, @AILongClick, @AIItemLongClick

    使用方法如下:

    Activity中使用:

    package com.wangjie.androidinject;
    
    import android.app.AlarmManager;
    import android.content.Intent;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.*;
    import com.wangjie.androidinject.annotation.annotations.*;
    import com.wangjie.androidinject.annotation.present.AIActivity;
    import com.wangjie.androidinject.model.Person;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @AIFullScreen
    @AINoTitle
    @AILayout(R.layout.main)
    public class MainActivity extends AIActivity{
    
        @AIView(id = R.id.btn1, clickMethod = "onClickCallback", longClickMethod = "onLongClickCallback")
        private Button btn1;
    
        @AIView(clickMethod = "onClickCallback", longClickMethod = "onLongClickCallback")
        private Button btn2;
    
    //    @AIView(id = R.id.btn3)
    //    private Button btn3;
    
    //    @AIView(id = R.id.listView, itemClickMethod = "onItemClickCallback", itemLongClickMethod = "onItemLongClickCallbackForListView")
        @AIView(id = R.id.listView)
        private ListView listView;
    
        @AIBean
        private Person person;
    
        @AISystemService
        private AlarmManager alarmManager;
        @AISystemService
        private LocationManager locationManager;
        @AISystemService
        private LayoutInflater inflater;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            List<Map<String, String>> list = new ArrayList<Map<String, String>>();
            Map<String, String> map;
            for(int i = 0; i < 10; i++){
                map = new HashMap<String, String>();
                map.put("title", "item_" + i);
                list.add(map);
            }
    
            SimpleAdapter adapter = new SimpleAdapter(context, list, R.layout.list_item, new String[]{"title"}, new int[]{R.id.list_item_title_tv});
            listView.setAdapter(adapter);
    
            person.setName("wangjie");
            person.setAge(23);
            System.out.println(person.toString());
    
            System.out.println("alarmManager: " + alarmManager + ", locationManager: " + locationManager + ", inflater: " + inflater);
    
    
        }
    
        @Override
        public void onClickCallback(View view){
            if(view instanceof Button){
                Toast.makeText(context, "onClickCallback: " + ((Button)view).getText(), Toast.LENGTH_SHORT).show();
            }
        }
    
        @Override
        public void onLongClickCallback(View view){
            if(view instanceof Button){
                Toast.makeText(context, "onLongClickCallback: " + ((Button)view).getText(), Toast.LENGTH_SHORT).show();
            }
        }
    
        @Override
        public void onItemClickCallback(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(context, "onItemClickCallback: " + ((Map<String, String>)adapterView.getAdapter().getItem(i)).get("title"), Toast.LENGTH_SHORT).show();
        }
    
        @AIClick({R.id.btn3, R.id.toFragmentBtn})
        public void onClickCallbackForBtn3(View view){
            if(view instanceof Button){
                Toast.makeText(context, "onClickForBtn3: " + ((Button)view).getText(), Toast.LENGTH_SHORT).show();
            }
    
            if(view.getId() == R.id.toFragmentBtn){
                startActivity(new Intent(context, SecendActivity.class));
            }
    
        }
    
        @AILongClick({R.id.btn3})
        public void onLongClickCallbackForBtn3(View view){
            if(view instanceof Button){
                Toast.makeText(context, "onLongClickCallbackForBtn3: " + ((Button)view).getText(), Toast.LENGTH_SHORT).show();
            }
        }
    
        @AIItemClick({R.id.listView})
        public void onItemClickCallbackForListView(AdapterView<?> adapterView, View view, int i, long l){
            Toast.makeText(context, "onItemClickCallbackForListView: " + ((Map<String, String>)adapterView.getAdapter().getItem(i)).get("title"), Toast.LENGTH_SHORT).show();
        }
    
        @AIItemLongClick(R.id.listView)
        public boolean onItemLongClickCallbackForListView(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(context, "onItemLongClickCallbackForListView: " + ((Map<String, String>)adapterView.getAdapter().getItem(i)).get("title"), Toast.LENGTH_SHORT).show();
            return true;
        }
    
    
    
    }
    View Code

    Fragment中使用:

     1 package com.wangjie.androidinject;
     2 
     3 import android.app.AlarmManager;
     4 import android.os.Bundle;
     5 import android.view.View;
     6 import android.widget.*;
     7 import com.wangjie.androidinject.annotation.annotations.*;
     8 import com.wangjie.androidinject.annotation.present.AISupportFragment;
     9 import com.wangjie.androidinject.model.Person;
    10 
    11 import java.util.ArrayList;
    12 import java.util.HashMap;
    13 import java.util.List;
    14 import java.util.Map;
    15 
    16 /**
    17  * Created with IntelliJ IDEA.
    18  * Author: wangjie  email:wangjie@cyyun.com
    19  * Date: 13-12-4
    20  * Time: 下午4:37
    21  */
    22 @AILayout(R.layout.fragment_a)
    23 public class FragmentA extends AISupportFragment{
    24 
    25     @AIView
    26     private Button fragmentABtn1;
    27 
    28     @AIView
    29     private GridView fragmentGv;
    30 
    31     @AIBean
    32     private Person person;
    33 
    34     @AISystemService
    35     private AlarmManager alarmManager;
    36 
    37     @Override
    38     public void onActivityCreated(Bundle savedInstanceState) {
    39         super.onActivityCreated(savedInstanceState);
    40 
    41         List<Map<String, String>> list = new ArrayList<Map<String, String>>();
    42         Map<String, String> map;
    43         for(int i = 0; i < 10; i++){
    44             map = new HashMap<String, String>();
    45             map.put("title", "fragment_item_" + i);
    46             list.add(map);
    47         }
    48 
    49         SimpleAdapter adapter = new SimpleAdapter(context, list, R.layout.list_item, new String[]{"title"}, new int[]{R.id.list_item_title_tv});
    50         fragmentGv.setAdapter(adapter);
    51 
    52         person.setName("androidInject");
    53         person.setAge(1);
    54         System.out.println(person.toString());
    55 
    56         System.out.println("alarmManager: " + alarmManager);
    57 
    58     }
    59 
    60     @AIClick(R.id.fragmentABtn1)
    61     private void btnOnclick(View view){
    62         if(view instanceof Button){
    63             Toast.makeText(context, "btnOnclick: " + ((Button)view).getText(), Toast.LENGTH_SHORT).show();
    64         }
    65     }
    66 
    67     @AILongClick(R.id.fragmentABtn1)
    68     private void btnOnLongClick(View view){
    69         if(view instanceof Button){
    70             Toast.makeText(context, "btnOnLongClick: " + ((Button)view).getText(), Toast.LENGTH_SHORT).show();
    71         }
    72     }
    73 
    74     @AIItemClick(R.id.fragmentGv)
    75     private void gvOnItemClick(AdapterView<?> adapterView, View view, int i, long l){
    76         Toast.makeText(context, "gvOnItemClick: " + ((Map<String, String>)adapterView.getAdapter().getItem(i)).get("title"), Toast.LENGTH_SHORT).show();
    77     }
    78 
    79     @AIItemLongClick(R.id.fragmentGv)
    80     private void gvOnItemLongClick(AdapterView<?> adapterView, View view, int i, long l){
    81         Toast.makeText(context, "gvOnItemLongClick: " + ((Map<String, String>)adapterView.getAdapter().getItem(i)).get("title"), Toast.LENGTH_SHORT).show();
    82     }
    83 
    84 
    85 }
    View Code

    具体注解如下:

    @AINoTitle: 类注解, 只适用于Activity(需继承于AIActivity), 设置Activity不显示Title

    @AIFullScreen: 类注解, 只适用于Activity(需继承于AIActivity), 设置Activity全屏

    @AILayout: 类注解
    value[int]: 用于设置该Activity的布局 ---- setContentView(resId);


    @AIView: 属性注解
    id[int]: 用于绑定控件 ---- findViewById(resId);(default identifier[R.id.{field name}] if did not set id)
    clickMethod[String]: 用于设置控件点击事件的回调方法, 可选, 方法名称任意, 参数必须为(View view)
    longClickMethod[String]: 用于设置控件长按的回调方法, 可选, 方法名任意, 参数必须为(View view)
    itemClickMethod[String]: 用于设置控件item点击的回调方法, 可选, 方法名任意, 参数必须为(AdapterView, View, int, long)
    itemLongClickMethod[String]: 用于设置控件item长按的回调方法, 可选, 方法名任意, 参数必须为(AdapterView, View, int, long)

    @AIBean: 属性注解, 为该属性生成一个对象并注入, 该对象必须有个默认的不带参数的构造方法

    @AISystemService: 属性注解,为该属性注入系统服务对象


    @AIClick: 方法注解
    value[int[], 所要绑定控件的id]: 用于绑定控件点击事件的回调方法, 方法名称任意, 参数必须为(View view)

    @AIItemClick: 方法注解
    value[int[], 所要绑定控件的id]: 用于绑定控件item点击事件的回调方法, 方法名称任意, 参数必须为(AdapterView, View, int, long)

    @AILongClick: 方法注解
    value[int[], 所要绑定控件的id]: 用于绑定控件长按事件的回调方法, 方法名称任意, 参数必须为(View view)

    @AIItemLongClick: 方法注解
    value[int[], 所要绑定控件的id]: 用于绑定控件item长按事件的回调方法, 方法名称任意, 参数必须为(AdapterView, View, int, long)

  • 相关阅读:
    2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。
    2017 Wuhan University Programming Contest (Online Round) C. Divide by Six 分析+模拟
    2017 Wuhan University Programming Contest (Online Round) B Color 树形dp求染色方法数
    GCD
    HighCharts SVN IReport进行PDF报表设计--模板
    项目二:品优购 第二天 AngularJS使用 brand商品页面的增删改查
    项目二 品优购第一天
    solr第一天 基础增删改查操作
    solr第二天 京东案例 课程文档 有用
    solr第二天 京东案例
  • 原文地址:https://www.cnblogs.com/tiantianbyconan/p/3459139.html
Copyright © 2020-2023  润新知