Android开源:RefreshLayout - 让你半小时以内完成一个列表界面
FerdinandFa
8年前
<h2>RefreshLayout</h2> <p>通用列表组件,让你半小时以内完成一个列表界面</p> <p>下拉刷新采用的谷歌的SwipeRefreshLayout</p> <p>列表目前是listview,后续会增加其他类型列表的切换</p> <p>可以继承RefreshLayout抽象类实现自己的样式</p> <p>默认提供一个SampleRefreshLayout。提供一些默认的样式</p> <p style="text-align:center">样式效果如图 <img src="https://simg.open-open.com/show/29755a2695e60962ca76526355a81aa3.png"> <img src="https://simg.open-open.com/show/571b462b4edb023a6dd725ab012ad12c.png"> <img src="https://simg.open-open.com/show/3fe2f6b49ed789e546e3ea0e8f39f12d.png"></p> <h2>使用</h2> <h2>xml</h2> <pre> <code class="language-java"><com.gengqiquan.layout.SampleRefreshLayout android:id="@+id/refresh" android:layout_width="match_parent" android:layout_height="match_parent"></com.gengqiquan.layout.SampleRefreshLayout></code></pre> <h2>activity初始化</h2> <pre> <code class="language-java"> 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> <h2>lambda写法</h2> <pre> <code class="language-java">@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> <h2>load()请求</h2> <pre> <code class="language-java">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> <h2>继承RefreshLayout实现自己布局样式</h2> <pre> <code class="language-java">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> <h2>依赖添加</h2> <h2>maven</h2> <pre> <code class="language-java"><dependency> <groupId>com.gengqiquan.refresh-layout</groupId> <artifactId>layout</artifactId> <version>1.0.2</version> <type>pom</type> </dependency></code></pre> <h2>gralde</h2> <pre> <code class="language-java">compile 'com.gengqiquan.refresh-layout:layout:1.0.2'</code></pre> <h2>lvy</h2> <pre> <code class="language-java"><dependency org='com.gengqiquan.refresh-layout' name='layout' rev='1.0.2'> <artifact name='layout' ext='pom' ></artifact> </dependency></code></pre> <p> </p> <p> </p> <p> </p>