android中无休止滚动的Searchview

android中无休止滚动的Searchview,android,android-recyclerview,searchview,infinite-scroll,endlessscroll,Android,Android Recyclerview,Searchview,Infinite Scroll,Endlessscroll,我的适配器 public class AdapterItem extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final int VIEW_ITEM = 1; private final int VIEW_PROG = 0; private ArrayList<Item> itemList; private OnLoadMoreListener onLoadMoreListener;

我的适配器

public class AdapterItem extends RecyclerView.Adapter<RecyclerView.ViewHolder>  { 
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;

private ArrayList<Item> itemList;

private OnLoadMoreListener onLoadMoreListener;
private LinearLayoutManager mLinearLayoutManager;

private boolean isMoreLoading = false;
private int visibleThreshold = 1;
int firstVisibleItem, visibleItemCount, totalItemCount;

public interface OnLoadMoreListener{
    void onLoadMore();
}

public AdapterItem(OnLoadMoreListener onLoadMoreListener) {
    this.onLoadMoreListener=onLoadMoreListener;
    itemList =new ArrayList<>();
}

public void setLinearLayoutManager(LinearLayoutManager linearLayoutManager){
    this.mLinearLayoutManager=linearLayoutManager;
}

public void setRecyclerView(RecyclerView mView){
    mView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @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 (!isMoreLoading && (totalItemCount - visibleItemCount)<= (firstVisibleItem + visibleThreshold)) {
                if (onLoadMoreListener != null) {
                    onLoadMoreListener.onLoadMore();
                }
                isMoreLoading = true;
            }
        }
    });
}

@Override
public int getItemViewType(int position) {
    return itemList.get(position) != null ? VIEW_ITEM : VIEW_PROG;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
    if (viewType == VIEW_ITEM) {
        return new StudentViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_text, parent, false));
    } else {
        return new ProgressViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_progress, parent, false));
    }

}

public void addAll(List<Item> lst){
    itemList.clear();
    itemList.addAll(lst);
    notifyDataSetChanged();
}

public void addItemMore(List<Item> lst){
    itemList.addAll(lst);
    notifyItemRangeChanged(0,itemList.size());
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof StudentViewHolder) {
        Item singleItem = (Item) itemList.get(position);
        ((StudentViewHolder) holder).tvItem.setText(singleItem.getItem());
    }
}

public void setMoreLoading(boolean isMoreLoading) {
    this.isMoreLoading=isMoreLoading;
}

@Override
public int getItemCount() {
    return itemList.size();
}

public void setProgressMore(final boolean isProgress) {
    if (isProgress) {
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                itemList.add(null);
                notifyItemInserted(itemList.size() - 1);
                }
            });
    } else {
        itemList.remove(itemList.size() - 1);
        notifyItemRemoved(itemList.size());
    }
}

static class StudentViewHolder extends RecyclerView.ViewHolder {
    public TextView tvItem;

    public StudentViewHolder(View v) {
        super(v);
        tvItem = (TextView) v.findViewById(R.id.tvItem);
    }
}

static class ProgressViewHolder extends RecyclerView.ViewHolder {
    public ProgressBar pBar;
    public ProgressViewHolder(View v) {
        super(v);
        pBar = (ProgressBar) v.findViewById(R.id.pBar);
    }
}}
公共类AdapterItem扩展了RecyclerView.Adapter{
私有最终int视图_项=1;
私有最终int视图_PROG=0;
私有arraylistitemlist;
私有OnLoadMoreListener OnLoadMoreListener;
私人线路布局经理;
私有布尔值isMoreLoading=false;
私有int visibleThreshold=1;
int firstVisibleItem、visibleItemCount、totalItemCount;
公共接口OnLoadMoreListener{
void onload more();
}
公共适配器项(OnLoadMoreListener OnLoadMoreListener){
this.onLoadMoreListener=onLoadMoreListener;
itemList=新的ArrayList();
}
public void setLinearLayoutManager(LinearLayoutManager LinearLayoutManager){
此.mLinearLayoutManager=linearLayoutManager;
}
公共void setRecyclerView(RecyclerView mView){
mView.addOnScrollListener(新的RecyclerView.OnScrollListener(){
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy){
super.onScrolled(recyclerView、dx、dy);
visibleItemCount=recyclerView.getChildCount();
totalItemCount=mLinearLayoutManager.getItemCount();
firstVisibleItem=mLinearLayoutManager.findFirstVisibleItemPosition();

如果(!isMoreLoading&&(totalItemCount-visibleItemCount)建议-不要这样做,那只会让人困惑

但要做到这一点,您需要: 1.公开
int getItemCount(){
return infinity,或者至少返回no1滚动到它的最大数字 2.在BindViewHolder(RecyclerView.ViewHolder,int position)上的
public void上{
make something“如果位置大于项目计数,则从位置移除项目计数,直到位置小于项目计数

如果需要,包含可搜索的recyclerview,tho,无需无限滚动

编辑:

onbind:

while(items.size() < position){
   position -= items.size();
}
textView.setText(items.get(position));
while(items.size()

那应该是无限卷轴,还没有测试过……但我仍然认为无限卷轴是个愚蠢的想法

我仍然很困惑,你能给我举个例子吗?这个例子不一样!你有解决这个问题的办法吗?
while(items.size() < position){
   position -= items.size();
}
textView.setText(items.get(position));