我有一个带有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) 我想搜索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) 我想要创建的是一个水平滚动图库.我有一个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) 我试图将一个简单的点击视图添加到回收站视图的项目,但由于某种原因,我必须单击一次项目而不是一次来执行操作.单击时,回收器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
如何自动RecyclerView平滑滚动,以便用户可以看到RecyclerView的所有元素并从头开始再次滚动 - 如同News Feed等.
我知道smoothScrollToPosition(),scrollToPosition()但他们最终会滚动到最后一个元素.
我希望RecyclerView能够动画并且移动缓慢.
我在理解官方文档使用的术语时遇到了一些麻烦.具体来说,有方法
onViewRecycled,onDetachedFromRecyclerView和
onViewDetachedFromWindow.这三者有什么区别?
我正在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
我想RecyclerView从数据集中获取项目的位置RecyclerView.我的数据集中的每个项目都包含唯一的ID.我想RecyclerView在数据集中的id中找到项目的适配器位置.
我的数据集类如下所示.
class dataset {
int id;
JSONArray linked;
int type;
....
}
Run Code Online (Sandbox Code Playgroud)
我添加TextView或EditText到RecyclerView根据类型.
最终目标:我RecyclerView可以拥有多个EditText并且TextViews是独立的(尽管TextView将有一个EditText与其相关联的id的字段).当我点击时TextView,我将获得EditText(数据集)的id 来从中获取数据.我想从那些id中EditText的项目中获取相应的文本RecyclerView.如果我可以从数据集中获取适配器位置,我可以使用
recyclerview.getChildAt(position);
Run Code Online (Sandbox Code Playgroud)
但是没有办法从数据集中获取适配器位置.
我有一个带有多个视图的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
我在应用中创建了可扩展的回收视图,如下所示
它具有父项目菜单类别,而类别具有子项目,如图所示
以下是我的父适配器代码的一部分。
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