我有一个应用程序,其中包含recyclerview与recyclerview之间的广告和丢失进度作为脚注在recyclerview的底部,当我在RecyclerView底部滚动时,它正在数据集中添加更多数据所有工作正常,但问题是在底部添加加载进度。如何在recyclerview底部添加加载进度?
代码主要活动:适配器
contacts = new ArrayList<>();
random = new Random();
for (int i = 0; i < 5; i++) {
Contact contact = new Contact();
contact.setPhone(phoneNumberGenerating());
contact.setEmail("Contact" + i + "@gmail.com");
contact.setViewType(1);
contacts.add(contact);
}
//Place two Admob Ads in recyclerview
Contact myString1 = new Contact();
myString1.setViewType(2);
contacts.add(3,myString1);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
contactAdapter = new ContactAdapter(recyclerView, contacts, this);
recyclerView.setAdapter(contactAdapter);
//set load more listener for the RecyclerView adapter
contactAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore() {
if (contacts.size() <= 7) {
contacts.add(null);
contactAdapter.notifyItemInserted(contacts.size() - 1);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
contacts.remove(contacts.size() - 1);
contactAdapter.notifyItemRemoved(contacts.size());
//Generating more data
int index = contacts.size();
int end = index + 2;
for (int i = index; i < end; i++) {
Contact contact = new Contact();
contact.setPhone(phoneNumberGenerating());
contact.setEmail("DevExchanges" + i + "@gmail.com");
contact.setViewType(1);
contacts.add(contact);
}
//Place one Admob Ads in recyclerview
Contact myString1 = new Contact();
myString1.setViewType(2);
contacts.add(3,myString1);
contactAdapter.notifyDataSetChanged();
contactAdapter.setLoaded();
}
}, 5000);
} else {
Toast.makeText(MainActivity.this, "Loading data completed", Toast.LENGTH_SHORT).show();
}
}
});
代码:
public int getItemViewType(int position) {
if (position == contacts.size()) {
// footer_view to check in your switch/case
return 3;
}
return contacts.get(position).getViewType();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder = null;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case 1:
View itemView = inflater.inflate(R.layout.item_recycler_view_row, parent, false);
viewHolder = new UserViewHolder(itemView);
break;
case 2:
View adView = inflater.inflate(R.layout.item_three, parent, false);
viewHolder = new ItemThree(adView);
break;
case 3:
View loading = inflater.inflate(R.layout.item_loading, parent, false);
viewHolder = new LoadingViewHolder(loading);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (holder.getItemViewType()) {
case 1:
Contact contact = contacts.get(position);
UserViewHolder userViewHolder = (UserViewHolder) holder;
userViewHolder.phone.setText(contact.getEmail());
userViewHolder.email.setText(contact.getPhone());
break;
case 2:
ItemThree itemThree = (ItemThree) holder;
itemThree.textView.setText("ADs");
break;
case 3:
LoadingViewHolder loadingViewHolder = (LoadingViewHolder) holder;
loadingViewHolder.progressBar.setIndeterminate(true);
break;
}
}
@Override
public int getItemCount() {
return contacts.size()+1;
}
在对回收鉴于最后一个项目添加了进度条所需条件的基础。每当您在RecyclerView中添加更多数据时,请务必将这些项目添加到最后一项的上方。 – Avi
请编辑我的代码........... – Raghav
您可以将进度视为页脚,请参阅此处的示例: - https://stackoverflow.com/a/29168617/1562659 – Avi