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>