Coder Social home page Coder Social logo

nukc / loadmorewrapper Goto Github PK

View Code? Open in Web Editor NEW
189.0 5.0 32.0 816 KB

📦 Enable the RecyclerView to support loading more and customizing the footer view without modifying the original adapter of the RecyclerView. 在不改动 RecyclerView 原有的 adapter 的情况下,使 RecyclerView 滑动到底部的时候能够加载更多和自定义底部视图。

License: Apache License 2.0

Java 100.00%
recyclerview-adapter loadmore android custom-view no-more failed-view retry

loadmorewrapper's Introduction

Keep learning 🎧

loadmorewrapper's People

Contributors

chowaikong avatar nukc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

loadmorewrapper's Issues

mutiltype?

如果是多类型的adapter,应该怎么应用呢?

README 写的不对。

README 里面
dependencies {
compile 'com.github.nukc:LoadMoreWrapper:v1.2'
}

应该是
compile 'com.github.nukc:LoadMoreWrapper:v1.2'

V1.2 不是1.2 ,1.2 拉不下,v1.2 才能拉下来。

Cannot call this method while RecyclerView is computing a layout or scrolling

我使用 android.support.v4.widget.SwipeRefreshLayout 来对 RecyclerView 下拉刷新数据,在完成刷新后就立刻执行了 LoadMoreWrapper 里面的加载更多,因为我 setListener 了。
我也看到 README 说 LoadMoreWrapper 在数据不足一整个屏幕的时候也会触发加载数据,所以会触发 RecyclerView 这个异常 Cannot call this method while RecyclerView is computing a layout or scrolling, 也就是 RecyclerView 在 onLayout 时 调用了 notify 相关的方法。
不知道作者有没有遇到过这个问题?我在你的 demo 里面操作了同样的步骤,但是奇怪的是并没有触发这个异常,在我的项目里面却触发了,所以想请教一下解决办法。

首次进入页面会自动加载更多?

首次进入页面adapter.getItemCount为0,LoadMoreAdapter会添加一个footer, 然后会加载更多,ui看起来很奇怪,因为加载更多在顶部,位置接近SwipeRefreshLayout下拉的地方。

setLoadMoreEnabled(false)无效

viewpager 里的 recycler view,loadmore的时候判断获取数据小于期望数据的时候设置setLoadMoreEnabled(false),但是下面小圆仍然在转,不知道是怎么回事?

获取失败

我按照 README 的配置提示获取失败了,执行 ./gradlew build --info 之后发现
Resource missing. [HTTP GET: https://jcenter.bintray.com/com/github/nukc/LoadMoreWrapper/1.2/LoadMoreWrapper-1.2.pom] Resource missing. [HTTP HEAD: https://jcenter.bintray.com/com/github/nukc/LoadMoreWrapper/1.2/LoadMoreWrapper-1.2.jar] Resource missing. [HTTP GET: https://jitpack.io/com/github/nukc/LoadMoreWrapper/1.2/LoadMoreWrapper-1.2.pom] Resource missing. [HTTP HEAD: https://jitpack.io/com/github/nukc/LoadMoreWrapper/1.2/LoadMoreWrapper-1.2.jar]
搜了一下可能是源重复了 jitpack/jitpack.io#424
我有两个项目同时需要从 jcenter 和 jitpack.io 获取第三方库,这两个项目都不能获取你的库,然后我另外一个没有添加 jitpack.io 源的项目就可以获取你的库了,不知道这应该怎么解决?

Can't hidden progress bar for loadmore loading bro

private fun initLoadMore(view: View) {
var load = LoadMoreWrapper.with(categoriesAllAdapter)
.setFooterView(-1)
.setNoMoreView(R.layout.base_no_more)
.setNoMoreView(view)
.setListener({ enabled ->
Log.i(TAG, "listener page $page last page : $lastPage")
if (page >= lastPage) {
Log.i(TAG, "no more to load")
enabled.loadMoreEnabled =false
mLoadMoreWrapper.setShowNoMoreEnabled(true )
} else {
categoriesAllRv.post({ apicall(true) })
}
}).setLoadMoreEnabled(true)
.into(categoriesAllRv)
mLoadMoreWrapper = LoadMoreWrapper(load)
}

function request

When loading ... if network request is fail load more fail view set on loading view bro :D and retry function also bro :D

自动加载更多

我发现在 NestedScorllView 里面的 RecyclerView 总是会触发加载更多,我直接在你的 sample 上加了点代码,百分百重现这个问题,在寻找原因中。

public class NestedActivity extends AppCompatActivity {

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_nested);

    final RecyclerView rv = (RecyclerView) findViewById(R.id.rv);
    final Issue9Adapter adapter = new Issue9Adapter(10);
    rv.setAdapter(adapter);

    LoadMoreWrapper.with(adapter)
        .setLoadMoreEnabled(true)
        .setListener(new LoadMoreAdapter.OnLoadMoreListener() {
          @Override public void onLoadMore(LoadMoreAdapter.Enabled enabled) {
            rv.postDelayed(new Runnable() {
              @Override public void run() {
                adapter.addItem();
              }
            }, 2000);
          }
        }).into(rv);
  }

  private class Issue9Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private int mCount;

    public Issue9Adapter(int count) {
      mCount = count;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_sample, parent, false);
      return new IssueHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
      ((IssueHolder) holder).mTextView.setText(position + "");
    }

    @Override
    public int getItemCount() {
      return mCount;
    }

    public void clear() {
      final int count = mCount;
      mCount = 0;
      notifyItemRangeRemoved(0, count);

      mCount = 15;
      notifyItemRangeInserted(0, mCount);
    }

    public void addItem() {
      final int positionStart = mCount;
      mCount+= 5;
      notifyItemRangeInserted(positionStart, 5);
    }

     class IssueHolder extends RecyclerView.ViewHolder {
      TextView mTextView;

      public IssueHolder(View itemView) {
        super(itemView);
        mTextView = (TextView) itemView.findViewById(R.id.text);
      }
    }
  }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.github.nukc.sample.NestedActivity"
    >

  <android.support.design.widget.AppBarLayout
      android:layout_width="match_parent"
      android:layout_height="250dp"
      >
    <android.support.design.widget.CollapsingToolbarLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
        app:titleEnabled="false"
        >
      <android.support.v7.widget.Toolbar
          android:layout_width="match_parent"
          android:layout_height="?attr/actionBarSize"
          />
    </android.support.design.widget.CollapsingToolbarLayout>
  </android.support.design.widget.AppBarLayout>

  <android.support.v4.widget.NestedScrollView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:fillViewport="true"
      app:layout_behavior="@string/appbar_scrolling_view_behavior"
      >
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        />
  </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

adapter.addItem() 这个方法会自动触发,即使还没有滑动。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.