标签: recycler-adapter

奇怪的Android RecyclerView(GridLayoutManager)焦点行为

我有一个带有GridLayoutManager的RecyclerView,每行有2列.因为开发适用于Android TV,所以我需要专注于导航.

在此输入图像描述

如果我使用向下键导航到任何可见项目,这没关系.例如,项目1 - >项目3 - >项目5 - >项目7(仅部分可见.).但是当我再次按下键时,焦点将转移到第10项而不是9.

在此输入图像描述

我的网格视图适配器是:

public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder> {    
    private ArrayList<String> mDataset;

    public GridAdapter(ArrayList<String> myDataset) {
        mDataset = myDataset;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.grid_item, viewGroup, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.txtTitle.setText(mDataset.get(position));    
    }

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

    public static class ViewHolder extends RecyclerView.ViewHolder {

        public TextView txtTitle;
        public ViewHolder(View v) …
Run Code Online (Sandbox Code Playgroud)

android android-tv recycler-adapter

7
推荐指数
1
解决办法
2940
查看次数

使用Searchview搜索RecyclerView

我想搜索RecyclerView,我有List<BaseOfCards> (BaseOfCards是我的getter和setter类)我的RecyclerViewAdapter:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {


private LayoutInflater inflater;
private List<BaseOfCards> items;

//private int itemLayout;
//String cardvalue;
private Activity mActivity;

public RecyclerViewAdapter(Activity mActivity, Context context, List<BaseOfCards> items) {
    this.mActivity = mActivity;
    inflater = LayoutInflater.from(context);
    this.items = items;
    //this.itemLayout = itemLayout;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = inflater.inflate(R.layout.custom_row, parent, false);
    MyViewHolder holder = new MyViewHolder(view, mActivity);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

    BaseOfCards …
Run Code Online (Sandbox Code Playgroud)

android searchview recycler-adapter android-recyclerview

7
推荐指数
1
解决办法
9374
查看次数

RecyclerView消失的图像

我想要创建的是一个水平滚动图库.我有一个RecyclerView(支持22.0.0).我遇到的问题是,当我滚动到最后然后向后滚动时,通常会丢失一个图像,有时会丢失两个图像.奇怪的是,当我不停地来回扫动时,可能会丢失不同的图像.这是项目的布局:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="160dp">

<ImageView
    android:id="@+id/product_variation_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:layout_gravity="center"/>
Run Code Online (Sandbox Code Playgroud)

这是Adaper:

public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> {
private String[] mDataset;

public static class ViewHolder extends RecyclerView.ViewHolder {

    public ImageView mImageView;
    public ViewHolder(View v) {
        super(v);
        mImageView = (ImageView) v.findViewById(R.id.product_variation_image);
    }
}

public TestAdapter(String[] myDataset) {
    mDataset = myDataset;
}

@Override
public TestAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.variaton_list_item, parent, false);
    ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

7
推荐指数
1
解决办法
6005
查看次数

双击Recycler View适配器的OnClickListener

我试图将一个简单的点击视图添加到回收站视图的项目,但由于某种原因,我必须单击一次项目而不是一次来执行操作.单击时,回收器View似乎没有检测到点击.然而,在下一个上它会检测到点击并执行适当的操作.

XML:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/cardView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >

    <RelativeLayout
        android:id="@+id/rlContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:background="@drawable/selector_inventory_recycler_item"
        android:padding="16dp">

        <ImageView
            android:id="@+id/item_photo"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="16dp"
            />

        <TextView
            android:id="@+id/txtItemName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/item_photo"
            android:textSize="16sp"
            />

        <TextView
            android:id="@+id/txtItemQuantity"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/txtItemName"

            android:layout_toRightOf="@+id/item_photo"
            />

        <TextView
            android:id="@+id/txtItemPrice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/txtItemQuantity"
            android:layout_toRightOf="@+id/item_photo"
            />

    </RelativeLayout>

</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

码:

    public class InventoryItemRecyclerAdapter extends RecyclerView.Adapter<InventoryItemRecyclerAdapter.InventoryItemViewHolder>  {


        onItemClickListener mOnItemClickListener = null;

        /**
         *
         */
        public ArrayList<Product> mInventoryItemList;

        Context mContext;

        static String TAG = "InventoryItemRecyclerAdapter";

        Random random = new Random();

        // ------------------------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

android onclicklistener recycler-adapter android-recyclerview

7
推荐指数
1
解决办法
4994
查看次数

RecyclerVIew自动滚动显示新闻Feed等中的所有元素,

如何自动RecyclerView平滑滚动,以便用户可以看到RecyclerView的所有元素并从头开始再次滚动 - 如同News Feed等.

我知道smoothScrollToPosition(),scrollToPosition()但他们最终会滚动到最后一个元素.

我希望RecyclerView能够动画并且移动缓慢.

android scroll recycler-adapter android-recyclerview

7
推荐指数
3
解决办法
1万
查看次数

Android中的onViewRecycled,onDetachedFromRecyclerView和onViewDetachedFromWindow之间的区别

我在理解官方文档使用的术语时遇到了一些麻烦.具体来说,有方法 onViewRecycled,onDetachedFromRecyclerViewonViewDetachedFromWindow.这三者有什么区别?

android recycler-adapter android-recyclerview

7
推荐指数
1
解决办法
4747
查看次数

RecyclerView java.lang.IndexOutOfBoundsException:检测到不一致。无效的视图支架适配器位置。由于更改了getItemCount()

我正在java.lang.IndexOutOfBoundsException: Inconsistency detected使用RecyclerView,但是只有在我似乎将其扔掉时才使用。当我滚动得足够慢时,它不会崩溃。

我将基本适配器用于许多其他子类,但是只有某些子类会崩溃。知道为什么会这样吗?

编辑

我发现发生这种情况的原因是因为getItemCount()更改取决于页脚加载视图的状态。我相信这会导致更改和滚动时出现不一致。

我通过始终在getItemCount()中的页眉/页脚加载视图返回2个额外的项来进行测试。而不是根据其状态动态计算计数。解决此问题的好方法是什么?

我的适配器

public abstract class BaseRecyclerAdapter<T>
        extends RecyclerView.Adapter<RecyclerView.ViewHolder>
        implements LoadingAndErrorViewHolder.LoadingViewHolderListener {

    public static final int STATUS_HIDDEN = 0;
    public static final int STATUS_LOADING = 1;
    public static final int STATUS_ERROR = 2;

    protected static final int TYPE_HEADER_LOADING = 0;
    protected static final int TYPE_FOOTER_LOADING = 1;
    protected static final int TYPE_NORMAL = 2;

    private static final int POSITION_TYPE_HEADER_LOADING = 0;

    private BaseRecyclerAdapterListener mBaseRecyclerAdapterListener;
    private final List<T> mBackingList = …
Run Code Online (Sandbox Code Playgroud)

android indexoutofboundsexception recycler-adapter android-recyclerview

6
推荐指数
1
解决办法
6682
查看次数

从数据列表中查找RecyclerView中项目的位置

我想RecyclerView从数据集中获取项目的位置RecyclerView.我的数据集中的每个项目都包含唯一的ID.我想RecyclerView在数据集中的id中找到项目的适配器位置.

我的数据集类如下所示.

class dataset {
    int id;
    JSONArray linked;
    int type;
    ....
}
Run Code Online (Sandbox Code Playgroud)

我添加TextViewEditTextRecyclerView根据类型.

最终目标:我RecyclerView可以拥有多个EditText并且TextViews是独立的(尽管TextView将有一个EditText与其相关联的id的字段).当我点击时TextView,我将获得EditText(数据集)的id 来从中获取数据.我想从那些id中EditText的项目中获取相应的文本RecyclerView.如果我可以从数据集中获取适配器位置,我可以使用

recyclerview.getChildAt(position);
Run Code Online (Sandbox Code Playgroud)

但是没有办法从数据集中获取适配器位置.

java android recycler-adapter android-recyclerview

6
推荐指数
0
解决办法
752
查看次数

嵌套的RecyclerView与多视图滞后滚动

我有一个带有多个视图的recyclerView,其中每一行都是recyclerView.当我滚动recyclelerView时,在创建的每一行上都是滞后的.这是我的一些代码.在下面你可以看到main recyclerView的配置:

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
    mRvPromotions.setLayoutManager(mLayoutManager);
    mRvPromotions.setItemViewCacheSize(20);
    mRvPromotions.setDrawingCacheEnabled(true);
    mRvPromotions.setHasFixedSize(true);
    mRvPromotions.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    mRvPromotions.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

你可以在下面看到在适配器中绑定的内部recyclerView的代码:

mRvPromotion.setLayoutManager(new GridLayoutManager(itemView.getContext(), 3));
    mRvPromotion.setItemViewCacheSize(20);
    mRvPromotion.setDrawingCacheEnabled(true);
    mRvPromotion.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    adapter = new PlaylistPromotionsRVAdapter(new PlaylistModelCallBack(), new PlaylistPromotionVHFactory());
    mRvPromotion.setAdapter(adapter);
    adapter.submitList(getVM().getPlaylist());
Run Code Online (Sandbox Code Playgroud)

我用mRvPromotion.setNestedScrollingEnabled(false);ViewCompat.setNestedScrollingEnabled(childRecyclerView, false);,但laggy行为存在的钢.对于加载图像,我使用了Fresco并调整了配置.如何防止滞后滚动?

编辑

这是我的适配器:

public class PlaylistRVAdapter extends ListAdapter<PlayListPromotionAndSlider, BaseViewHolder> {

private final PlaylistPageVHFactory mFactory;
private final PublishSubject<PlaylistSliderVHAction> mClickSliderPS = PublishSubject.create();
private final PublishSubject<PlaylistPromotionsVHAction> mClickPromotionPS = PublishSubject.create();

@Inject
PlaylistRVAdapter(@NonNull PlaylistPromotionModelCallBack diffCallback, PlaylistPageVHFactory factory) {
    super(diffCallback);
    mFactory = factory;
}

@NonNull
@Override
public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview fresco nestedrecyclerview

6
推荐指数
1
解决办法
961
查看次数

嵌套的Expandable RecyclerView滞后于“展开”和“折叠”,子项目数量过多

我在应用中创建了可扩展的回收视图,如下所示

它具有父项目菜单类别,而类别具有子项目,如图所示

在此处输入图片说明

以下是我的适配器代码的一部分。

 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
    if (i > HEADER_COUNT - 1) {
        FoodMenuItem foodMenuItem = foodMenuItems.get(i - HEADER_COUNT);
        MenuViewHolder menuViewHolder = (MenuViewHolder) viewHolder;
        //menuViewHolder.rvMenu.setLayoutManager(new LinearLayoutManager(viewHolder.itemView.getContext(), LinearLayoutManager.VERTICAL, false));
        if (isVegOnly) {
            List<Item> items = new ArrayList<>();
            for (Item item : foodMenuItem.getItems()) {
                if (item.getType().equalsIgnoreCase(Item.FOOD_TYPE_VEG)) {
                    items.add(item);
                }
            }
            menuViewHolder.rvMenu.setAdapter(new FoodMenuChildRecycler(items, foodMenuParentListener, i, isAddAllowed));
            menuViewHolder.tvNumItems.setText("(" + items.size() + " items)");

        } else {
            menuViewHolder.rvMenu.setAdapter(new FoodMenuChildRecycler(foodMenuItem.getItems(), foodMenuParentListener, i, isAddAllowed));
            menuViewHolder.tvNumItems.setText("(" + foodMenuItem.getItems().size() + " items)"); …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview expandablerecyclerview android-nestedscrollview

6
推荐指数
0
解决办法
576
查看次数