2017-07-28 16 views
-2

私はrecyclelerviewの下にスクロールすると、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

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

を置き換える3を入力している場合、最後の項目をチェックし、常に来ます所望の条件の基底。 RecyclerViewにデータを追加するたびに、それらのアイテムを必ず最後のアイテムの上に追加してください。 – Avi

+0

Pls edit my code ........... – Raghav

+0

進捗状況をフッターとして扱うことができます。例えば、以下を参照してください。 - https://stackoverflow.com/a/29168617/1562659 – Avi

答えて

0

簡単な方法としては、このライブラリにhttps://github.com/mikepenz/FastAdapter

を使用してfooterAdapterなど、あなたの進行状況ビューを使用することです。

しかし、あなたのアプローチでは、notifyAdapterChangeの直前にタイプ3の連絡先を追加する必要があります。

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

そして毎回データ、それは上のリサイクルビューの最後の項目でプログレスバーを追加

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

plsは私のコードを編集..... – Raghav

関連する問題