2017-07-28 63 views
-2

我有一个应用程序,其中包含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; 
} 
+0

在对回收鉴于最后一个项目添加了进度条所需条件的基础。每当您在RecyclerView中添加更多数据时,请务必将这些项目添加到最后一项的上方。 – Avi

+0

请编辑我的代码........... – Raghav

+0

您可以将进度视为页脚,请参阅此处的示例: - https://stackoverflow.com/a/29168617/1562659 – Avi

回答

0

一个简单的方法是使用这个库https://github.com/mikepenz/FastAdapter

,并使用你的进步视图footerAdapter。

但是在您的方法中,您应该在notifyAdapterChange之前立即添加一个类型3 Contact。

if(shouldLoadMore){ 
    Contact laoder = new Contact(); 
    contact.setViewType(3); 
    contacts.add(loader); 
} 

每次和一个数据来自经常检查的最后一个项目,如果它的类型是3.更换

contacts.remove(contacts.size()-1); 

if(contacts.size() > 0 && contacts.get(contacts.size()-1).getViewType() == 3){ 
    contacts.remove(contacts.size()-1); 
} 
+0

请编辑我的代码..... – Raghav