Android 在回收器视图中使用自定义动画进行无限滚动不工作
我在Recycler视图中使用了项目动画,效果很好。我还想添加无限滚动的回收,为这个我这样做Android 在回收器视图中使用自定义动画进行无限滚动不工作,android,animation,android-recyclerview,Android,Animation,Android Recyclerview,我在Recycler视图中使用了项目动画,效果很好。我还想添加无限滚动的回收,为这个我这样做 public abstract class InfiniteScroller extends RecyclerView.OnScrollListener { private int previousTotal = 0; // The total number of items in the dataset after the last load private boolean
public abstract class InfiniteScroller extends RecyclerView.OnScrollListener {
private int previousTotal = 0; // The total number of items in the dataset after the last load
private boolean loading = true; // True if we are still waiting for the last set of data to load.
private int visibleThreshold = 5; // The minimum amount of items to have below your current scroll position before loading more.
int firstVisibleItem, visibleItemCount, totalItemCount;
private int current_page = 1;
private LinearLayoutManager mLinearLayoutManager;
public InfiniteScroller(LinearLayoutManager linearLayoutManager) {
this.mLinearLayoutManager = linearLayoutManager;
}
public abstract void onLoadMore(int current_page);
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
// Do Nothing
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
visibleItemCount = recyclerView.getChildCount();
totalItemCount = mLinearLayoutManager.getItemCount();
firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
}
}
if (!loading && (totalItemCount - visibleItemCount)
<= (firstVisibleItem + visibleThreshold)) {
// End has been reached
// Do something
current_page++;
onLoadMore(current_page);
loading = true;
}
}
}
如果我注释掉动画行,它将无限滚动,但不会以其他方式滚动。
请查看代码并告诉我出了什么问题。所以我自己找到了问题并解决了:) 对于那些有同样问题的人,我将分享我的经验
我正在调用mAdpter.notifyItemInserted(position),但它应该是ScaleDapter.notifyItemInserted(position)。您在哪里调用了ScaleDapter.notifyItemInserted(position)。?
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
mRecylerView = (RecyclerView)view.findViewById(R.id.my_recycler_view);
mLayoutManager = new LinearLayoutManager(getActivity());
mRecylerView.setLayoutManager(mLayoutManager);
initialize();
mAdapter = new MyAdapter(persons);
AlphaInAnimationAdapter alphaAdapter = new AlphaInAnimationAdapter(mAdapter);
ScaleInAnimationAdapter scaleAdapter = new ScaleInAnimationAdapter(alphaAdapter);
scaleAdapter.setDuration(1000);
scaleAdapter.setInterpolator(new OvershootInterpolator());
mRecylerView.setAdapter(scaleAdapter);
mRecylerView.setOnScrollListener(new InfiniteScroller(mLayoutManager) {
@Override
public void onLoadMore(int current_page) {
Log.i("Infinite Scroller", "Current page = " + current_page);
insertNewItem();
}
});
return view;
}