先入門後實戰,本篇文章從0開始一步步實戰出一個列表頁,趟坑之路正式起航!html
先來看下咱們要實現的界面吧。android
各位老司機確定熟悉,先Compile;git
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.alibaba:fastjson:1.1.46.android'
compile 'com.taobao.android:weex_sdk:0.11.0'
複製代碼
而後在應用Application中初始化;github
InitConfig config=new InitConfig.Builder().setImgAdapter(new ImageAdapter()).build();// 本身實現的圖片加載的Adapter擴展;
WXSDKEngine.initialize(this,config);
複製代碼
首先咱們來分析寫這個界面,列出幾個關鍵詞:列表、Header、下拉刷新、上拉加載;若是使用Android原生開發的話咱們會使用到列表組件、而後下拉刷新和上拉加載使用自定義控件的方式實現。apache
那麼同理,咱們先來找下Weex中的列表組件,在手冊——》內建組件中發現——》list,是否是想起了Android原生的listview或者是recycleview。而list組件中也提供了條目類型的支持(cell)、header、下拉刷新(refresh)、上拉加載(loading)。json
對總體佈局進行拆解:微信
總體佈局拆分完了那咱們就開始寫具體的佈局了,經常使用控件組件的使用參考內建組件,而佈局規則能夠參考通用樣式;weex
通過一陣子的編寫,咱們已經開發出了初步的界面,代碼此處不貼。最主要的是List組件,裏面包含一個header、兩個不一樣的cell、一個refresh、一個loading;網絡
使用接口數據毋庸置疑須要使用到網絡組件,咱們來看下stream組件;首先進行聲明app
var stream = weex.requireModule('stream')
複製代碼
而後參考其文檔上的Demo,不過惋惜的是文檔上的Demo只有Get請求,而咱們使用到的接口須要使用Post:
下面貼出一個加Header的Post請求:
stream.fetch({
method: 'POST',
type: 'json',
url: url,
headers: {
'deviceid': '',
'uid': ''
},
body: data
}, function(res) {}
複製代碼
網絡請求的方法寫好以後,咱們開始調用;有幾個調用的時機:
這點和原生的接口調用時機是同樣的。
加上各類狀態(下拉刷新、上拉加載等的顯示隱藏與page的控制等),和原生的流程相似。以後這個界面基本上就算完成了。
若是本文到此就貼源碼結束,就顯得有點水了,不像個人風格。誠然此入門篇實戰對照着官方文檔、官方Demo、項目Issue等也能夠寫出,既然挑戰性不是那麼強,那咱們就本身加點料:通常項目都會有本身的通用下拉刷新控件來實現同樣的效果,上面咱們實現的下拉刷新是Weex自帶的,如何換成咱們本身的下拉刷新呢?
咱們項目中使用的下拉刷新庫是ultra-ptr,通用性強並且能夠自定義Header效果。這個Weex界面要想用ultra-ptr實現的下拉刷新那就要將兩者結合起來;
本文中咱們選擇第二種方案:將Weex生成的View加到ultra-ptr中做爲其Content,來實現下拉刷新的效果。
備註:爲何不選第一種呢?由於第一種咱們下篇文章講。
這樣就須要咱們在Activity中也設置一個包含下拉刷新的佈局,而後在Weex界面刷新出來的時候將其加到下拉刷新的控件裏,這樣Weex界面就和咱們應用自身的下拉刷新界面結合到了一塊兒,下拉刷新的風格天然和原來的應用保持一致。
來看下最終實現的效果:
使用Android和Weex開發的首頁的一個對比:第一張是Android,第二張是Weex;
對比線條的高度能夠看出,Android開發性能優於Weex可是差別並不大(左側的起始點比後側靠下)。
一個問題:你們有沒有以爲Weex和咱們本身的下拉刷新結合的怎麼就這麼容易,簡直不像本身平時寫代碼的感覺!其實確實沒有那麼容易,Weex和咱們的下拉刷新控件直接結合使用是有事件衝突的,那麼下一篇文章咱們就來一塊兒看看如何解決Weex與項目裏下拉刷新的衝突!
歡迎關注微信公衆號:按期分享Java、Android乾貨!