ioc基礎(視圖,資源,assert流入)-dhroid文檔

tags:    時間:2014-03-26 16:39:50
ioc基礎(視圖,資源,assert注入)-dhroid文檔

上一節 Android 極速開發框架 dhroid來了

1 ioc即控制反轉。

控制反轉(Inversion of Control,英文縮寫為IoC)是一個重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的Spring框架的核心。 

控制反轉還有一個名字叫做依賴注入(Dependency Injection)

    dhroid的ioc不僅實現了視圖和資源的注入,同時對於對象,介面的注入做了很大的努力

 

ioc中最簡單最好實現的就是視圖資源注入,dhroid的ioc核心其實是對象(介面的)注入

下面還是從簡單的視圖注入開始到複雜的介面對象注入

 

1.1注入視圖

 

public class IocTestActivity extends BaseActivity{        @InjectView(id=R.id.text)        TextView textV;          @Override        protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                setContentView(R.layout.ioc_test_activity);                if(textV==null){                     Log.e("dhroid", "textV不為空,我是不會列印的");                 }       } }

 

 

上邊就是一個視圖注入的例子

textV在contentView(layout)之後就已經被賦值了

 

1.1注入視圖

   注入視圖的註解是 @InjectView

   

    @InjectView,參數id  

        進行視圖查找,相當於findViewById(R.id.xxx)

     

   @InjectView 的參數屬性layout 

        可以注入一個layout布局,

       

 相當於LayoutInflater.from(this).inflate(R.layout.xxx, null);

 

 

        如    

  @InjectView(layout=R.layout.ioc_head)    ViewGroup headV;

      @InjectView 的參數屬性inView

      表明該view只某個view的子view

      如      

        //注入布局文件 	@InjectView(layout=R.layout.ioc_head) 	ViewGroup headV; 	//在其他視圖中查看 	@InjectView(id=R.id.intext,inView="headV") 	TextView childTextV;

     表明childTextV是headV的子view

   

 相當於  headV=(ViewGroup )LayoutInflater.from(this).inflate(R.layout.ioc_head, null); childTextV=headV.findViewById(R.id.intext);

 

   1.1.1 為視圖添加事件

     

   下面的代碼添加了點擊事件

 

	@InjectView(id=R.id.assertFile,click="toInstal") 	View instalApkV;          public void toInstal(View v) { 		Log.v("dhroid", "instalApk點擊后我會被執行");         }

   

 

   事件還有itemclick 和itemLongclick 

 

	@InjectView(id=R.id.listView,itemClick="toEditStudent",itemLongClick="toDeleteStudent") 	ListView listView;          	public void toEditStudent(AdapterView<?> parent, View view, int position, long id) { 		Log.v("dhroid", "itemClick事件"); 	}  	public void toDeleteStudent(AdapterView<?> parent, View view, final int position, long id) { 		Log.v("dhroid", "itemLongClick事件"); 	}  

  

 

 

1.2注入資源

     使用註解@InjectResource

    資源可以注入drawable,string,color,dimen

 

    下面代碼相當於getResources().getString(R.string.app_name)

 

	//注入字串 	@InjectResource(string=R.string.app_name) 	String appname;

 

 

    下面代碼相當於getResources().getDrawable(R.drawable.ic_launcher)

 

 

 

 

        @InjectResource(drawable=R.drawable.ic_launcher) 	Drawable icDraw;

   

    color,和dimen同理

    

	//這裡不能為int因為int有默認值0 有值的屬性會被忽略,防止重複注入 	@InjectResource(color=R.color.link) 	Integer colorLink; 	//注入圖片 	@InjectResource(drawable=R.drawable.ic_launcher) 	Drawable icDraw;

 1.3 注入extra

   頁面間數據傳遞也可以注入的

   下面代碼相當於getIntent().getStringExtra("str");

	//接受傳入的字元串 	@InjectExtra(name="str",def="默認值") 	String extra;

   Integer,Long,Float,Double,Boolean(特殊的JSONObject,JSONArray,其他bean對象都能傳)

   這裡需要特殊說明一下不能使用int,long,float,double因為他們有默認值,注入時發現有值會濾過的

   如果有默認值請寫到def屬性下,

   特殊的JSONObject,JSONArray和bean對象是特殊強制轉換的結果,傳入的對象都還string類型

傳入時         it.putExtra("jo", "{name:'我是json字元串'}");         it.putExtra("array", "[{name:'我是json數組'}]");         it.putExtra("bean", "{name:'我是json字元串'}"); 接受時 	@InjectExtra(name="jo") 	JSONObject extrajo; 	@InjectExtra(name="array") 	JSONArray   extraarray;  	@InjectExtra(name="bean") 	User   extrauser;

 

 

1.4 注入assert

    @InjectAssert主要是用來注入assert中的文件的

    下面代碼可以注入assert文件夾下面的testtext.json的文本內容

 

	@InjectAssert(path="testtext.json") 	String testassert;

   如果你的文本內容本來就是json可以寫為

 

 

	@InjectAssert(path="testtext.json") 	JSONObject jo;

   我們還能注入文件如

 

 

       @InjectAssert(path="anzhi.apk") 	File apkFile;

 因為assert本身不支持文件讀寫的所以其實先將文件拷貝出去后然後賦值的,文件拷貝時是非同步的使用時需要注意文件是否拷貝完成,

 

 可以在需要使用前面的頁面就進行一次注入(文件只會拷貝一次)

 

下一節 ioc高級(介面,對象注入)-dhroid文檔

 

 開源中國地址:http://www.oschina.net/p/dhroid

開源項目地址:http://git.oschina.net/tengzhinei/dhroid
qq交流群:297593013(歡迎加入)

推薦閱讀文章

Bookmark the permalink ,來源:互聯網