標籤:
昨天對xUtils整體上做了一個簡單的介紹,今天咱們就代碼碼起,真刀實槍的也看看,看看如何快速便捷的把xUtils給整合到大家的項目中去。xUtils中有四大組件可以供我們使用,分別是ViewUtils、HttpUtils、BitmapUtils以及DbUtils。如果你沒能先讀一下我的上一篇文章,那麼請你移步過去先整體瞭解一下,再回過頭來看這篇文章,相信你回更有體會的。
下面依次開始介紹這些組件具體的使用。
一、ViewUtils android中得ioc(控制反轉)架構,可以完全使用註解的方式來完成UI的綁定和事件綁定。簡單的說,ViewUtils的功能就是做這個的,但是可以說,就這麼個功能確是能極大的簡化我們的代碼。下面我們看下具體的代碼,順便對比下註解的方式綁定ID和findViewById之間的差別。
@ViewInject(R.id.btn) private Button btn; @ViewInject(R.id.img) private ImageView img; @ViewInject(R.id.list) private ListView list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); ViewUtils.inject(this);}
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); btn = (Button) findViewById(R.id.btn); img = (ImageView) findViewById(R.id.img); list = (ListView) findViewById(R.id.list); }
如果項目中得Activity中的控制項相當多,那麼想象一下代碼中累積的那一大坨就真心受不了。通過xUtils的簡單註解,就能輕鬆擺脫無盡壞味道的代碼。
注意:在使用註解繫結控制項的時候,一定記得在onCreate中調用ViewUtils.inject(this);
下面我們再對比下Android中事件綁定的區別。
@OnClick({ R.id.btn, R.id.img }) public void clickMethod(View v) { Toast.makeText(SecondActivity.this, "you clicked button!", Toast.LENGTH_SHORT).show(); } @OnItemClick(R.id.list) public void itemClick(AdapterView<?> parent, View view, int position,long id) { Toast.makeText(SecondActivity.this, "position--->" + position, Toast.LENGTH_SHORT).show(); }
btn.setOnClickListener(this); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(SecondActivity.this, "position--->" + position, Toast.LENGTH_SHORT).show(); } }); @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn: Toast.makeText(SecondActivity.this, "you clicked button!", Toast.LENGTH_SHORT).show(); break; default: break; } }
原本綁定Button的監聽事件要麼用醜陋的內部類,要麼Activity實現OnClickListener,在複寫的onClick方法中去根據id。而xUtils只要通過簡單的一句註解就能實現監聽事件的功能,而且可以實現多個控制項共用一個監聽方法。同時xUtils提供onClick、onItemClick、onLongClick等15種事件監聽註解。
注意:在使用註解監聽事件的時候,監聽方法名是自訂的,但是一定要保證方法的存取修飾詞為public,同時方法的參數要與Android原來的監聽方法參數一致,不僅參數類型,而且要保證參數的順序。
二、BitmapUtils 載入網路或本地bitmap的時候無需擔心再遇到OOM的現象,管理bitmap的記憶體採用了LRU演算法,同時也能避免列表滑動過程中發生圖片錯位等得現象。載入網狀圖片時,還可以配置運行線程的數量,緩衝路徑等。。。通過BitmapUtils的各種構造器,可以很方便的建立出本機快取路徑和緩衝的大小,以及記憶體緩衝的大小。
BitmapUtils utils = new BitmapUtils(this); BitmapDisplayConfig config = new BitmapDisplayConfig(this); config.setLoadingDrawable(getResources().getDrawable(R.drawable.loading)); config.setLoadFailedDrawable(getResources().getDrawable(R.drawable.failed)); config.setImageLoadCallBack(new ImageLoadCallBack() { @Override public void loadFailed(ImageView imageView, Drawable drawable) { } @Override public void loadCompleted(ImageView imageView, Drawable drawable, BitmapDisplayConfig config) { } }); config.setBitmapMaxWidth(480); config.setBitmapMaxHeight(720);// utils.display(img, "http://img1.gtimg.com/news/pics/hv1/63/26/1451/94357968.jpg"); utils.display(img, "http://img1.gtimg.com/news/pics/hv1/63/26/1451/94357968.jpg", config);
BitmapUtils在用來載入網狀圖片時,可以配置載入圖片尺寸的大小,載入成功和失敗的回調以及載入過程中圖片的配置。同時也可以選擇不配置。
//bitmapUtils.display(testImageView, "/sdcard/test.jpg"); //支援載入本地圖片// 使用ListView等容器展示圖片時可通過PauseOnScrollListener控制滑動和快速滑動過程中時候暫停載入圖片listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true), customListener);
剩下的兩個組件:DbUtils和HttpUtils
轉自:http://my.oschina.net/jack1900/blog/173526
Android-xUtils架構介紹(二)