RecyclerView carrega mais com o erro ProgressBar
Estou tentando criarRecyclerview
onLoadMore comProgressBar
no fundo. eu tenteiesta solução, mas o método onLoadMore no meuActivity
nunca é chamado. Por favor me ajude.
Aqui está o meuAdapter
:
public class NewsAdapterTest extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<NewsDataModel> dataSet;
private Context context;
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;
// The minimum amount of items to have below your current scroll position before loading more.
private int visibleThreshold = 2;
private int lastVisibleItem, totalItemCount;
private boolean loading;
private OnLoadMoreListener onLoadMoreListener;
public NewsAdapterTest(ArrayList<NewsDataModel> data, Context context, RecyclerView recyclerView) {
this.dataSet = data;
this.context = context;
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
totalItemCount = linearLayoutManager.getItemCount();
lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition();
if (!loading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
// End has been reached
// Do something
Log.i("newsAdaptertest", "onScrolled: End reached");
if (onLoadMoreListener != null) {
onLoadMoreListener.onLoadMore();
}
loading = true;
}
}
});
}
}
public class MyViewHolder extends RecyclerView.ViewHolder {
ExpandableTextView postMessage;
TextView postTitle;
TextView postSubTitle;
ImageView authorImage;
public MyViewHolder(View itemView) {
super(itemView);
this.authorImage = (ImageView) itemView.findViewById(R.id.header_image);
this.postTitle = (TextView) itemView.findViewById(R.id.header_title);
this.postSubTitle = (TextView) itemView.findViewById(R.id.header_subtitle);
this.postMessage = (ExpandableTextView) itemView.findViewById(R.id.post_text_expand);
}
}
@Override
public int getItemCount() {
return dataSet.size();
}
@Override
public int getItemViewType(int position) {
return dataSet.get(position) != null ? VIEW_ITEM : VIEW_PROG;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder vh;
if (viewType == VIEW_ITEM) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_news, parent, false);
vh = new MyViewHolder(v);
} else {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_progress, parent, false);
vh = new ProgressViewHolder(v);
}
return vh;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int listPosition) {
if (holder instanceof MyViewHolder) {
Binding Views...
} else {
((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
}
}
public void setLoaded() {
loading = false;
}
public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
this.onLoadMoreListener = onLoadMoreListener;
}
public interface OnLoadMoreListener {
void onLoadMore();
}
public static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar;
public ProgressViewHolder(View v) {
super(v);
progressBar = (ProgressBar) v.findViewById(R.id.progressBar);
}
}
}
E minha atividade:
private static NewsAdapterTest adapter;
private LinearLayoutManager layoutManager;
private static RecyclerView recyclerView;
private ArrayList<NewsDataModel> data = new ArrayList<NewsDataModel>();
recyclerView = (RecyclerView) findViewById(R.id.recyclerview_news);
layoutManager = new LinearLayoutManager(this);
adapter = new NewsAdapterTest(data, NewsActivity.this, recyclerView);
recyclerView.setHasFixedSize(false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
adapter.setOnLoadMoreListener(new NewsAdapterTest.OnLoadMoreListener() {
@Override
public void onLoadMore() {
Log.i(TAG, "onLoadMore called");
//add progress item
data.add(null);
adapter.notifyItemInserted(data.size() - 1);
Log.i(TAG, "Loading new data... (" + Integer.toString(loadNumber) + ") posts");
loadPosts(startLoadPosition, loadNumber);
startLoadPosition += loadNumber;
//remove progress item
data.remove(data.size() - 1);
adapter.notifyItemRemoved(data.size());
//add items one by one
adapter.setLoaded();
//or you can add all at once but do not forget to call mAdapter.notifyDataSetChanged();
}
});