10

Ich habe Probleme Scrollen in horizontalen Recycler view.For zB wenn ich 10 Elemente habe, allererste Mal, kann ich bis zum letzten Element scrollen, aber wenn ich zum ersten Element gehen und dann erneut scrollen Um den letzten Punkt zu erreichen, bewegt er sich nicht zum letzten Punkt.In Bezug auf ProperScrolling in horizontaler Recycler View

Ist dieses Problem im Zusammenhang mit Scrollen, sollte ich für das Scrollen überschreiben, wenn das der Fall ist.

Das ist meine Fragment Klassendeklaration

 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); 

und in meinem Adapter

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(); 
    } 
}; 

}

I horizontale Tabellenansicht verwenden versuchen, die mit V17 Leanback kommt, die auch recycleView erstreckt , aber ich stehe immer noch vor ähnlichen Problemen,

Wenn ich versuche, zur Laufzeit ein beliebiges Objekt in die Recycler-Ansicht einzufügen, zB um Photo zu machen, wird es auch nicht hinzugefügt, es weist Speicherplatz zu und es ist leer - sehr schwer zu verstehen oder zu diesem Thema zu debuggen.

+0

Es könnte ein Problem mit Ihrem Adapter sein. Ohne Ihren Code ist es fast unmöglich, eine Antwort zu geben. – eleven

+0

Ich habe Code aktualisiert, bin ich etwas fehlt – Rakesh

+0

Vielen Dank für Ihre Hilfe.Issue teilweise gelöst teilweise durch Angabe der vordefinierten Breite und Höhe jeweils als 100 dp zu untergeordneten Ansichten in meinem Fall von NetworkImageView von Volley-Bibliothek.In statt geben von Wrap Inhalt oder übergeordnetes Elternteil, die vordefinierte Breite und Höhe gab mir funktionierte :), Nicht eine korrekte Lösung, aber Problem beharrt immer noch mit horizontalGridView (LeanBack-Bibliothek) – Rakesh

Antwort

2

Try Layout wie diese zu verwenden, kann Ihnen helfen,

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

Ich habe das schon benutzt, aber es ist nicht fruchtbar – Rakesh

2

Plz versuchen, diese

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

und in Adapter

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

Versuchen Sie, diese

Adapter

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 Aktivität

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

Vielen Dank für Ihre help.Issue teilweise teilweise gelöst wurde durch die vorgegebene Breite und Höhe jeweils als 100 dp Kind Ansichten in meinem Fall von NetworkImageView von Volley library.Instead geben Geben von Wrap-Inhalt oder Match Elternteil, geben vordefinierte Breite und Höhe funktionierte mich :), Nicht eine richtige Lösung, aber Problem weiterhin mit HorizontalGridView (LeanBack-Bibliothek)