編輯:關於Android編程
今年在HTML5開發中使用AngularJS框架,覺得MVVM的框架太方便了,雙向綁定機制省去了很多繁瑣的工作,於是想在新的Android項目也引入類似的MVVM框架,提高團隊的開發效率和代碼的工程化程度,然後就找到了RoboBinding這個框架,簡單看了下感覺應該還算靠譜。
RoboBinding是一個實現了數據綁定 Presentation
Model(MVVM)
模式的Android開源框架。MVVM模式是MVC模式的重要更新,使得項目結構更加的優美,易於維護以及方便於測試。這也是為什麼幾個主流的語言都有相應的MVVM框架實現如Microsfot
WPF, Silverlight,JavaFX以及Flex。
在沒有性能損失的前提下(使用AspectJ字節碼生成來替代Java反射),RoboBinding 幫助你編寫更可讀,易於測試與維護的UI代碼。框架具備以下優點:
通過綁定移除 - 大量不必要的代碼(如addXXListener(),findViewById()等) 。
將 - 難於測試的Android代碼以及運行過久且不切實際的Android單元測試 - 變為 pojo PresentationModels 及其普通的JUnit單元測試。
提供對象類型Cursor來替換 - 關系類型Cursor,因為我們已經習慣於操作對象 。
可以很容易的為任何自定義組件,第三方組件或Android widget編寫屬性綁定實現,簡化代碼,使項目易於維護。
從簡單的角度看,他移除了如addXXListener(),findViewById()這些不必要的代碼,連如BufferKnife那樣的InjectView都不需要,因為你的代碼一般不需要依賴於這些界面組件信息。下面以一個最簡單的AndroidMVVM為例。
Layout:
? 1 2 3 4 5 6 7 8 9 10<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools
=
"http://schemas.android.com/tools"
xmlns:bind
=
"http://robobinding.org/android"
>
<
TextView
bind:text
=
"{hello}"
/>
...
<
Button
android:text
=
"Say Hello"
bind:onClick
=
"sayHello"
/>
LinearLayout
>
Presentation Model:
? 1 2 3 4 5 6 7 8 9 10public
class
PresentationModel
extends
AbstractPresentationModel {
private
String name;
public
String getHello() {
return
name +
": hello Android MVVM(Presentation Model)!"
;
}
...
public
void
sayHello() {
firePropertyChange(
"hello"
);
}
}
Activity將layout與對應的presentation model綁定在一起。
? 1 2 3 4 5 6 7 8 9public
class
MainActivity
extends
Activity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
...
PresentationModel presentationModel =
new
PresentationModel();
View rootView = Binders.inflateAndBindWithoutPreInitializingViews(
this
, R.layout.activity_main, presentationModel);
setContentView(rootView);
}
}
這樣layout的{hello}與PresentationModel.hello綁定,layout的sayHello與PresenationModel.sayHello方法綁定。我們不需要在Layout中定義TextView, Button的Id因為我們不關心,且沒有必要。當我們進一步觀察時,我們發現PresentationModel是一個Pure POJO。這也是為什麼軟件界的泰斗Martin Fowler在2004年,提出了Presenation Model(MVVM) 模式。它是我們所熟悉的MVC的升級,進一步的把界面狀態與邏輯解藕到Presentation Model中。我們可以通過以下幾個示例項目學習RoboBinding使用,他們都可以直接導入Android Studio無需額外配置:
1.AndroidMVVM,最小的RoboBinding使用例子。
2.Album Sample,是Martin Fowler的Presentation Model模式原始例子基於RoboBinding的Android翻譯版本。
3.Gallery,是用於展示RoboBinding的各種特性的使用包含Fragment, Menu, ViewPager等。
項目的中文文檔地址是:http://robobinding.github.io/RoboBinding/index.zh.html
項目主頁:http://www.open-open.com/lib/view/home/1410667351476
本文實例講述了android從系統圖庫中取圖片的實現方法。分享給大家供大家參考。具體如下:在自己應用中,從系統圖庫中取圖片,然後截取其中一部分,再返回到自己應用中。這是很
最近做一個頁面,反饋問題頁面,有個用戶上傳問題圖片的功能。本來很笨的想把系統的所有圖片列出來,然後讓用戶選擇,後來發現原來可以直接打開手機所有圖片的api的。效果如圖:給
本文使用Android Studio開發。獲取定位信息相對簡單,我們只需要如下幾步:第一步,注冊百度賬號,在百度地圖開放平台新建應用、生成API_KEY。這些就不細說了,
動態加載資源原理通常我們調用getResources()方法獲取資源文件public Resources getResources() { return mReso