2016-08-04 20 views
0

Ich versuche, endlose Infinite Scrolling mit RecyclerView zu implementieren, aber ich bekomme nur alle Datensätze und sogar keinen Fortschritt beim Versuch, unten scrollen. und sehen diesen meinen Code das ist mein News_AdapterClassCastException: MyViewHolder kann nicht in ProgressViewHolder

public class NewsAdapter extends RecyclerView.Adapter { 
private final int VIEW_ITEM = 1; 
private final int VIEW_PROG = 0; 

private List<News> newsList; 
private Context context; 

// The minimum amount of items to have below your current scroll position 
// before loading more. 
private int visibleThreshold = 5; 
private int lastVisibleItem, totalItemCount; 
private boolean loading; 
private OnLoadMoreListener onLoadMoreListener; 

public NewsAdapter(List<News> newsList , RecyclerView recyclerView){ 
    this.newsList = newsList; 
    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 
        if (onLoadMoreListener != null) { 
         onLoadMoreListener.onLoadMore(); 
        } 
        loading = true; 
       } 
      } 
      @Override 
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
       super.onScrollStateChanged(recyclerView, newState); 

       // When went to the end of the list, load more posts 
       if (newState == RecyclerView.SCROLL_STATE_IDLE) { 

        if (linearLayoutManager.findLastVisibleItemPosition() >= linearLayoutManager.getItemCount() - 1) { 
         // Grow List 
        } 
       } 
      } 
     }); 
    } 
} 

@Override 
public int getItemViewType(int position){ 
    //return newsList.get(position) instanceof News ? VIEW_ITEM : VIEW_PROG; 
    return (position >= newsList.size()) ? VIEW_PROG : VIEW_ITEM; 
} 
@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.news_list_row, parent, false); 
     vh = new MyViewHolder(v); 
    } else { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.progress_item, parent, false); 

     vh = new ProgressViewHolder(v); 
    } 
    return vh; 
} 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView title; 
    public ImageView image,nextArrowimage; 
    public TextView desc; 
    private News news; 

    public MyViewHolder(View view) { 

     super(view); 
     ProgressBar progressBar = null; 
     title = (TextView) view.findViewById(R.id.News_title); 
     image = (ImageView) view.findViewById(R.id.News_imageView); 
     nextArrowimage = (ImageView)view.findViewById(R.id.news_NextArrow); 
     desc = (TextView) view.findViewById(R.id.News_desc); 

     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String title = news.getTitle(); 
       String desc = news.getDesc(); 
       String image = "http://bitstobyte.in/upload/"+news.getImage(); 

       Intent intent = new Intent(context, News_Activity.class); 
       intent.putExtra("title", title); 
       intent.putExtra("desc",desc); 
       intent.putExtra("imageUrl", image); 
       context.startActivity(intent); 

       Toast.makeText(v.getContext(), "OnClick :" + news.getTitle() + " \n "+news.getImage(),Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder,int position){ 
    //if (holder instanceof MyViewHolder) { 
    // if (getItemViewType(position)==VIEW_ITEM) { 
    if (newsList.get(position)!=null && getItemViewType(position)==VIEW_ITEM) { 
     final News single_news= newsList.get(position); 

      ((MyViewHolder) holder).title.setText(single_news.getTitle()); 

      ((MyViewHolder) holder).desc.setText(single_news.getDesc()); 

      ((MyViewHolder) holder).nextArrowimage.setImageResource(R.drawable.nextblackbutton); 

      context = ((MyViewHolder) holder).image.getContext(); 

      Picasso.with(context).load("http://bitstobyte.in/upload/"+single_news.getImage()).placeholder(R.drawable.ic_favorite_white_24dp).error(R.drawable.ic_map_24dp).resize(100,100).into(((MyViewHolder) holder).image); 

      ((MyViewHolder) holder).news= single_news; 

    } else { 
     ((ProgressViewHolder) holder).progressBar.setIndeterminate(true); 
    } 
} 
public void setLoaded() { 
    loading = false; 
} 
@Override 
public int getItemCount() { 
    return newsList.size()+1; 
} 

public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) { 
    this.onLoadMoreListener = onLoadMoreListener; 
} 

public static class ProgressViewHolder extends RecyclerView.ViewHolder { 
    public ProgressBar progressBar; 

    public ProgressViewHolder(View v) { 
     super(v); 
     progressBar = (ProgressBar)v.findViewById(R.id.progressBar1); 
    } 
} 

}

+0

Mai werden Sie generischen Typen Ihres 'ViewHolder' angeben vergessen. Ich meine, Sie müssen Ihre Elternklasse angeben. 'erweitert RecyclerView.Adapter ' –

Antwort

0

Sie sind Fehler im rechten unterhalb der Linie zu bekommen?

((ProgressViewHolder) holder).progressBar.setIndeterminate(true); 

Können Sie sagen, warum Sie zwei ViewHolder verwendet haben?

FYI: Sie können nicht zwei ViewHolder bedeutet, können nicht zwei ViewHolder erweitert werden.

+0

ok ... ich sende meinen vollen Code..nun habe ich meinen Code geändert keine Fehler sind da, aber sogar nicht progressBar –

+0

yestarday ich postete meinen vollen Code siehe einmal: http: //stackoverflow.com/questions/38743298/recyclerviewpagination-endless-infinite-scrolling-issue –

+0

frnds ich folgte LoadMore RecyclerView mit Fortschrittsbalken zeigt unten Beispiel: http://android-pratap.blogspot.in/2015/06 /endless-recyclerview-with-progress-bar.html –

0

Gerade diese Funktion ändern:

@Override 
public int getItemViewType(int position){ 
    //return newsList.get(position) instanceof News ? VIEW_ITEM : VIEW_PROG; 
    return (position >= newsList.size() || newsList.get(position)==null) ? VIEW_PROG : VIEW_ITEM; 
} 

Und

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder,int position){ 
if (getItemViewType(position)==VIEW_ITEM) { 
    final News single_news= newsList.get(position); 

     ((MyViewHolder) holder).title.setText(single_news.getTitle()); 

     ((MyViewHolder) holder).desc.setText(single_news.getDesc()); 

     ((MyViewHolder) holder).nextArrowimage.setImageResource(R.drawable.nextblackbutton); 

     context = ((MyViewHolder) holder).image.getContext(); 

     Picasso.with(context).load("http://bitstobyte.in/upload/"+single_news.getImage()).placeholder(R.drawable.ic_favorite_white_24dp).error(R.drawable.ic_map_24dp).resize(100,100).into(((MyViewHolder) holder).image); 

     ((MyViewHolder) holder).news= single_news; 

} else { 
    ((ProgressViewHolder) holder).progressBar.setIndeterminate(true); 
} 
} 
+0

Ich habe IndexOutofBoundException ..... sowieso yestarday ich postete meinen vollen Code ... dieser Code erhielt keine Fehler, aber sogar nicht progressbar .... das ist mein Code : http://stackoverflow.com/questions/38743298/recyclerviewpagination-endless-infinite-scrolling-issue –

+0

frnds folgte ich LoadMore RecyclerView mit Fortschrittsbalken zeigt am unteren Beispiel: http: // android-prat ap.blogspot.in/2015/06/endless-recyclerview-with-progress-bar.html –

+0

Bitte versuchen Sie update Antwort – anhtuannd