[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)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM