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));