Android開源:RefreshLayout - 讓你半小時以內完成一個列表界面

FerdinandFa 7年前發布 | 7K 次閱讀 安卓開發 Android開發 移動開發

RefreshLayout

通用列表組件,讓你半小時以內完成一個列表界面

下拉刷新采用的谷歌的SwipeRefreshLayout

列表目前是listview,后續會增加其他類型列表的切換

可以繼承RefreshLayout抽象類實現自己的樣式

默認提供一個SampleRefreshLayout。提供一些默認的樣式

樣式效果如圖

使用

xml

<com.gengqiquan.layout.SampleRefreshLayout
        android:id="@+id/refresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.gengqiquan.layout.SampleRefreshLayout>

activity初始化

    refresh = (SampleRefreshLayout) findViewById(R.id.refresh);
        refresh .noDataLable("暫時沒有訂單數據")//無數據文本,默認暫無數據
                .noDataImg(R.drawable.message_default)//無數據圖片
                .pageCount(20)//分頁數量,默認20
                .refreshEnable(true)//允許手動刷新,默認true
                .loadMoreEnable(true)//允許分頁,默認true
                .showTopView(true)//顯示一鍵回到頂部按鈕,默認false
                .adapter(new SBAdapter<String>(this)
                        .layout(android.R.layout.simple_list_item_1)//item布局
                        .bindViewData(new Converter<String>() {
                            @Override
                            public void convert(Holder holder, String item) {//數據綁定
                                holder.setText(android.R.id.text1, item);
                            }
                        }))//通用適配器
                .refresh(new RefreshListener() {//刷新回調
                    @Override
                    public void onRefresh() {
                        load(true);
                    }

            })
            .loadMore(new LoadMoreListener() {//加載更多回調
                @Override
                public void LoadMore() {
                    load(false);
                }
            })
            .doRefresh();//主動調用刷新加載初始數據</code></pre> 

lambda寫法

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        refresh = (SampleRefreshLayout) findViewById(R.id.refresh);
        refresh .noDataLable("暫時沒有訂單數據")
                .noDataImg(R.drawable.message_default)
                .pageCount(20)
                .refreshEnable(true)
                .loadMoreEnable(true)
                .showTopView(true)
                .adapter(new SBAdapter<String>(this)
                        .layout(android.R.layout.simple_list_item_1)
                        .bindViewData(this::bindViewData))
                .refresh(()->load(true))
                .loadMore(()-> load(false))
                .doRefresh();

}
public void bindViewData(Holder holder, String item) {
    holder.setText(android.R.id.text1, item);
}</code></pre> 

load()請求

private void load(final boolean isrefresh) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Looper.prepare();
                try {
                    if (isrefresh)
                    Thread.sleep(2000);
                    else
                        Thread.sleep(500);
                } catch (Exception e) {

            }
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    List<String> list = new ArrayList();
                    for (int i = 0; i < 20; i++) {
                        list.add("           " + i);
                    }
                    if (isrefresh)
                        refresh.refreshComplete(list);
                    else
                        refresh.loadMoreComplete(list);
                   //請求失敗調用 refresh.loadFailure();
                }
            });

        }
    }).start();
}</code></pre> 

繼承RefreshLayout實現自己布局樣式

public class MyRefreshLayout extends RefreshLayout {

//添加自定義加載更多界面
public SampleRefreshLayout FooterLayout(FooterLayout layout) {
    mLoadMoreView = layout;
    return this;
}

//添加自定義無數據界面,需實現NoDataLayout接口 @Override NoDataLayout onCreateNoDataView() { return new SimpleNoDataLayout(mContext); } //添加自定義加載更多布局,需實現FooterLayout接口 @Override FooterLayout onCreateLoadMoreView() { return mLoadMoreView; } //添加自定義回到頂部按鈕布局 @Override View onCreateTopView() { return mTopView; } //添加自定義請求失敗布局 @Override View onCreateFailureView() { return mFailureView; }

public SampleRefreshLayout(Context context) {
    this(context, null);
}

public SampleRefreshLayout(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

public SampleRefreshLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    build();//記得這一句
}</code></pre> 

依賴添加

maven

<dependency>
  <groupId>com.gengqiquan.refresh-layout</groupId>
  <artifactId>layout</artifactId>
  <version>1.0.2</version>
  <type>pom</type>
</dependency>

gralde

compile 'com.gengqiquan.refresh-layout:layout:1.0.2'

lvy

<dependency org='com.gengqiquan.refresh-layout' name='layout' rev='1.0.2'>
  <artifact name='layout' ext='pom' ></artifact>
</dependency>

 

 

 

 本文由用戶 FerdinandFa 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!