Что касается ProperScrolling в режиме горизонтального просмотра ресайклеров

У меня есть проблемы с прокруткой в ​​режиме горизонтального просмотра. Например, если у меня есть 10 элементов, в первый раз, я могу прокручивать до последнего элемента. Но если я перехожу к первому элементу, а затем снова прокручиваюсь до последнего элемента, не переходя к последнему пункту.

Является ли эта проблема связанной с прокруткой, если я переопределяю ее для прокрутки, в этом случае.

Это мое объявление класса фрагмента

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

и в моем адаптере

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

}

Я пытаюсь использовать горизонтальный вид сетки, который поставляется с поддержкой V17, который также расширяет recycleView, но все же я также сталкиваюсь с подобной проблемой,

Если я пытаюсь добавить какой-либо элемент к просмотру ресайзера во время выполнения, например, при съемке с фотографией, он также не добавляется, он выделяет пространство и пуст? Очень трудно понять или отладить эту проблему.

Ответ 1

Попробуйте использовать layoutManager, как это, может помочь вам

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

Ответ 2

Plz попробуйте это

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

и в адаптере

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

Ответ 3

Попробуйте это

Адаптер

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

В действии

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

Ответ 4

Спасибо за вашу помощь. Частично частично решили решить, предоставив предопределенную ширину и высоту каждого из них как 100 dp для дочерних представлений в моем случае NetworkImageView библиотеки Volley. Вместо предоставления содержимого обертки или соответствия родительскому, предоставляя предопределенную ширину и высота работала мне:), Неправильное решение, но проблема все еще сохраняется с horizontalGridView (библиотека LeanBack)