10

Ho problemi a scorrere in orizzontale vista recycler.Per esempio se ho 10 articoli, la prima volta, sono in grado di scorrere fino all'ultimo elemento, ma se vado al primo elemento e poi scorrere ancora per ultimo elemento, non si sta muovendo per ultimo elemento.Per quanto riguarda il corretto scorrimento in orizzontale Recycler View

Questo problema è correlato allo scorrimento, se devo eseguire l'override per lo scorrimento, in tal caso.

Questo è il mio frammento dichiarazione di classe

 LinearLayoutManager layoutManager 
      = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); 
    mRecyclerView = (RecyclerView)v. findViewById(R.id.recycler_view); 
    adapter = new MyRecyclerAdapter(getActivity()); 
    mRecyclerView.setLayoutManager(layoutManager); 
    mRecyclerView.setAdapter(adapter); 

e il mio adattatore

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.CustomViewHolder> { 

private Context mContext; 
JobSiteActivity mjobSiteActivity; 
ImageLoader loader = null; 

public MyRecyclerAdapter(Activity activity) { 
    this.mContext = activity; 
    mjobSiteActivity = (JobSiteActivity)activity; 
    loader = mjobSiteActivity.getImageLoader(); 
} 

@Override 
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.image_detail_fragment, null); 

    CustomViewHolder viewHolder = new CustomViewHolder(view); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(CustomViewHolder customViewHolder, int i) { 
    //FeedItem feedItem = feedItemList.get(i); 

    //Download image using picasso library 
    /* Picasso.with(mContext).load(feedItem.getThumbnail()) 
      .error(R.drawable.placeholder) 
      .placeholder(R.drawable.placeholder) 
      .into(customViewHolder.imageView);*/ 

    customViewHolder.imageView.setImageUrl(Images.imageThumbUrls[i], loader); 
    customViewHolder.imageView.setOnClickListener(clickListener); 
    customViewHolder.imageView.setTag(customViewHolder); 


    //Setting text view title 

} 

@Override 
public int getItemCount() { 
    //return (null != feedItemList ? feedItemList.size() : 0); 
    return Images.imageThumbUrls.length; 
} 

public class CustomViewHolder extends RecyclerView.ViewHolder { 
    protected NetworkImageView imageView; 


    public CustomViewHolder(View view) { 
     super(view); 
     this.imageView = (NetworkImageView) view.findViewById(R.id.imageView); 

    } 
} 


View.OnClickListener clickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     CustomViewHolder holder = (CustomViewHolder) view.getTag(); 
     int position = holder.getLayoutPosition(); 
     int position1 = holder.getAdapterPosition(); 
     Toast.makeText(mContext, "layoutPs"+position+"adapPos"+position, Toast.LENGTH_SHORT).show(); 
    } 
}; 

}

Sto cercando di usare orizzontale vista Griglia che viene fornito con Leanback V17 che si estende anche recycleView , ma ancora sto affrontando lo stesso tipo di problema,

Se provo ad aggiungere qualsiasi elemento alla vista del recycler in fase di esecuzione, ad esempio, per scattare foto, non viene aggiunto anche, Alloca lo spazio ed è vuoto? Molto difficile da capire o eseguire il debug su questo problema.

+0

Potrebbe essere un problema dell'adattatore. Senza avere il tuo codice è quasi impossibile dare una risposta. – eleven

+0

Ho aggiornato il codice, mi manca qualcosa – Rakesh

+0

Grazie per il vostro aiuto.Issue si è parzialmente risolto parzialmente dando la larghezza e l'altezza predefinite ciascuna da 100 dp alle viste figlio nel mio caso di NetworkImageView della libreria Volley.Invece di dare del contenuto di avvolgimento o corrisponde al genitore, dando la larghezza e l'altezza predefinite mi ha funzionato :), Non è una soluzione corretta, Ma il problema persiste ancora con horizontalGridView (LeanBack Library) – Rakesh

risposta

2

Tenta di utilizzare LayoutManager come questo, può aiutare

LinearLayoutManager layoutManager=new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.HORIZONTAL,false); 
+0

L'ho già usato, ma non è fruttuoso – Rakesh

2

Plz provare questo

LinearLayoutManager layoutManager 
      = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); 
    RecyclerView recyclerViewr = (RecyclerView) findViewById(R.id.recyclerView); 
    recyclerView.setLayoutManager(layoutManager); 

e adattatore

private class ImageCycleAdapter extends RecyclerView.Adapter<ImageCycleAdapter.ImageViewHolder> { 


    private Context context; 
    private List<ImageUrls> ids; 
    private RecyclerViewClickListener listner; 
    private int focusedItem = 0; 

    public ImageCycleAdapter(Context context, List<ImageUrls> urlsList, RecyclerViewClickListener listner) { 
     this.context = context; 
     this.ids = urlsList; 
     this.listner = listner; 
    } 

    @Override 
    public ImageCycleAdapter.ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.image_detail_fragment, null); 

CustomViewHolder viewHolder = new CustomViewHolder(view); 
return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ImageCycleAdapter.ImageViewHolder holder, int position) { 
     customViewHolder.imageView.setImageUrl(Images.imageThumbUrls[i], loader); 
customViewHolder.imageView.setOnClickListener(clickListener); 
customViewHolder.imageView.setTag(customViewHolder); 



    } 
    private void tryMoveSelection(RecyclerView.LayoutManager lm, int position) { 
     focusedItem = position; 
     notifyItemChanged(focusedItem); 
      lm.scrollToPosition(focusedItem); 
     notifyDataSetChanged(); 
    } 
    @Override 
    public int getItemCount() { 
     return ids.size(); 
    } 

    public class ImageViewHolder extends RecyclerView.ViewHolder { 
     protected NetworkImageView imageView; 

     public ImageViewHolder(View v) { 
      super(v); 
     this.imageView = (NetworkImageView) view.findViewById(R.id.imageView); 
      imageView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        // do your action 

       } 
      }); 

     } 
    } 
} 

public interface RecyclerViewClickListener { 

    public void recyclerImageClicked(View v, int position); 
} 
1

Prova questo adattatore

public class CardAdapter extends 
RecyclerView.Adapter<CardAdapter.ViewHolder> { 
    ArrayList<String> m_list = new ArrayList<String>(); 

    public CardAdapter(ArrayList<String> m_list){ 
     this.m_list = m_list; 
    } 

    @Override 
    public int getItemCount() { 
     return m_list.size(); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder hv, int arg1) { 
     UrlImageViewHelper.setUrlDrawable(hv.img, m_list.get(arg1), 
       R.drawable.ic_launcher, new UrlImageViewCallback() { 
        @Override 
        public void onLoaded(ImageView imageView, 
          Bitmap loadedBitmap, String url, 
          boolean loadedFromCache) { 
        } 
       }); 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int arg1) { 
     View v; 

     v = LayoutInflater.from(viewGroup.getContext()).inflate(
       R.layout.friend_recycler_item, viewGroup, false); 

     ViewHolder hv = new ViewHolder(v); 
     return hv; 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
     ImageView img; 
     public ViewHolder(View arg1) { 
      super(arg1); 
      img = (ImageView) arg1.findViewById(R.id.img); 
     } 
    } 
} 

In attività

RecyclerView lstPacks = (RecyclerView) rowView.findViewById(R.id.lstPacks); 
lstPacks.setHasFixedSize(true); 
mLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); 
lstPacks.setLayoutManager(holder.mLayoutManager); 

CardAdapter adapter1 = new CardAdapter(list); 
lstPacks.setAdapter(holder.adapter1); 
0

Grazie per la vostra help.Issue ricevuti parzialmente risolti in parte dando la larghezza e l'altezza predefinita ciascuno come 100 dp alle viste bambino nel mio caso di NetworkImageView di Volley library.Instead di dare di wrap content o match parent, dando larghezza e altezza predefinite mi ha funzionato :), Non una soluzione corretta, Ma il problema persiste ancora con horizontalGridView (LeanBack Library)