Articles of 回收器适配器

为什么RecyclerView onBindViewHolder只调用一次?

在我的代码中有一个奇怪的错误。 我使用Recycler View(以前没有任何问题)。 我创build了testingArrayList在Recycler中显示它,但是我得到了RecyclerView中唯一的第一行,之后,应用程序停止(不崩溃)像ArrayList完成。 我的主要代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_all_tab, container, false); Activity activity = getActivity(); //TODO: For testing ONLY ArrayList<Order> orders = new ArrayList<>(); for(int i = 0; i < 10; i++) { orders.add(new Order(i, i, i)); } […]

RecyclerView使用notifyItemMoved()损坏视图

我遇到了使用notifyItemMoved()方法的问题。 这似乎是错误地显示unmoved的意见。 我的列表中有4个元素。 我想要做的是在项目1和项目3之间进行交换animation。项目1和3交换正确,但项目2显示项目3的内容! 所以名单开始看起来像这样: Item 0 Item 1 Item 2 Item 3 并且像这样结束: Item 0 Item 3 Item 3 <!– What the heck has this changed for? Item 1 我的适配器由List mProductList支持。 我打电话给下面的代码: public void sortBackingListUsingSortingList(List<ProductWrapper> newProductItems) { Log.e("", "Before:"); for(ProductWrapper wrapper : mProductItems) wrapper.log(); for(int i = 0; i < newProductItems.size(); i++) { ProductWrapper […]

从适配器更改滚动值的Recyclerview

我正在尝试使用RecyclerView和回收站适配器填充列表的应用程序。 但是,当我快速滚动列表中的列表项时,列表项中的值有时会混洗。 有没有一个已知的解决办法?

从recyclerview android获取选中的checkbox列表

我已经填充了图像,标题和checkboxrecyclerView。 我有两个问题。 如何在点击图像视图或整个回收站项目时选中checkbox。 我必须通过从回收站查看所有检查的项目来进行下一个活动。 我的布局: <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="8dp"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="150dp" android:layout_gravity="center_horizontal" android:contentDescription="Interests" android:scaleType="centerCrop" android:src="@drawable/ic_yash_dp" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_gravity="bottom" android:layout_margin="5dp" android:layout_marginTop="24dp" android:background="@drawable/rounded_corners" android:gravity="bottom" android:padding="5dp" android:text="GYM" android:textAlignment="center" android:textColor="@color/white" /> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/checkBox" android:layout_margin="2dp" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout> 我的适配器: @Override public void onBindViewHolder(RecyclerViewHolder holder, int position) { final […]

如何更改onClick的RecyclerView项目的viewType

我创build了一个以卡片为主要视图types的RecyclerView。 我试图实现的是,当用户点击一个项目,该项目的ViewType从卡片更改为另一个Viewtype(例如列表文字浏览放置水平滚动)。 我的代码为RecyclerView适配器如下: 在下面的一段代码中,我创build了一个枚举types的列表来跟踪recyclerview中每行的点击状态,然后我得到了我的数据集的大小,并用SHOW_PRIMARY_CONTENT为每一行初始化了我的数组列表 public class DisplayItemsAdapter extends RecyclerView.Adapter<DisplayItemsAdapter.ViewHolder> { private static ArrayList<clickedState> itemClickedState; private enum clickedState { SHOW_PRIMARY_CONTENT, SHOW_SECONDARY_CONTENT } private ArrayList<ItemData> mDataset = new ArrayList<>(); public DisplayItemsAdapter(ArrayList<ItemData> dataset) { mDataset = dataset; itemClickedState = new ArrayList<>(); for (int i = 0; i < mDataset.size(); i++) { itemClickedState.add(i, clickedState.SHOW_PRIMARY_CONTENT); } } 下面是我的ViewHolder类,它持有对我所有的子视图的引用,它实现了View.OnClickListener。 为什么它实现了View.OnClickListener,以便它可以在点击状态之间切换以相应地改变viewType。 public […]

notifyItemChanged()使RecyclerView滚动并跳转到UP

我有一个适配器的RecycleView显示服务器列表,用户必须select一个服务器。 当我在onClick()方法内调用notifyItemChanged(previousPosition)来使旧的服务器被取消select,并select新的服务器时,这就使得RecycleView列表完全跳到列表中间。 当我点击RecycleView列表中的最后2个或3个服务器之一时,就会发生这个问题 这里是我的RecyclerView.Adapter的代码: public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ServerViewHolder> { private List<Server> listServers = new ArrayList<>(); private int[] icons = new int[]{R.drawable.server1,R.drawable.server2,R.drawable.server3,R.drawable.server4,R.drawable.server5,R.drawable.server6,R.drawable.offline}; private int selected = 0; private int previousSelected = 0; public ServerAdapter(List<Server> listServers){ this.listServers = listServers; } @Override public ServerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.server_relative_layout,parent,false); return new ServerViewHolder(view); } […]

当使用Runnable从Handler中使用notifyItemChanged时,RecyclerView会崩溃

我使用RecyclerView作为列表来显示可以下载的歌曲。 每个项目在其View都有ProgressBar 。 下载开始后,我使用Handler通知每个项目更新ProgressBar以显示歌曲下载进度。 Q1。 这是一个正确的方法来做到这一点吗?还有没有其他的方法可以更恰当地做到这一点。 Q2。 当我们使用adapter.notifyItemChanged(position);时,RecyclerView会崩溃adapter.notifyItemChanged(position); 更新单个项目的内容。 它使用Runnable从Handler调用。 但是,日志不显示我的代码的任何痕迹。 为什么? 以下是这个问题的日志: 05-06 19:09:45.804: E/AndroidRuntime(32115): FATAL EXCEPTION: main 05-06 19:09:45.804: E/AndroidRuntime(32115): java.lang.IllegalArgumentException: Tmp detached view should be removed from RecyclerView before it can be recycled: ViewHolder{41b7bec0 position=6 id=-1, oldPos=-1, pLpos:-1 update changed tmpDetachedundefined adapter position no parent} 05-06 19:09:45.804: E/AndroidRuntime(32115): at android.support.v7.widget.RecyclerView$Recycler.recycleViewHolderInternal(RecyclerView.java:3861) 05-06 19:09:45.804: […]

删除RecyclerView项目

我有一个RecyclerView,每个特定的时期添加项目。 当添加对象时,如果列表项目多于(可以说)500,那么第一个项目将被删除,新的项目将被添加。 如果RecyclerView无法向下滚动!recyclerView.canScrollVertically(1); 然后,添加新的项目后,RecyclerView将smoothScroolToPosition()到最后的位置。 哪里有问题? 好的,如果ReyclerView在中间(不是底部,不是顶部)移除旧的物品时,会突然跳到一些位置。 我希望RecyclerView不要跳位置,并保持它在顶部删除项目时的位置 我尝试使用layoutManager.setStackFromEnd(true); 但没有运气 有什么build议么? 一些代码(无关的代码被删除)。 当RecyclerView从中间显示列表项并按下VOLUME_UP时,我的问题可以被重现: public class ActivityMain extends ActionBarActivity { public static final int MAX_LOG_ITEMS = 500; private RecyclerView mRecyclerView; private AdapterLog mRecyclerAdapter; private boolean mAutoScroll = true; private DataReceiver mDataReceiver; private Handler mLogHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what){ case […]

如何在LinearLayoutManager中重叠项目 – RecyclerView(如堆叠卡)

有可能重叠从RecyclerView项目? 我正在尝试与LinearLayoutManager。 我的需求和LinearLayoutManager一样,只需要从上到下重叠项目。 (如堆叠卡) 我已经看到一些使用ListView的变种 。 所以,我认为在RecyclerView中也是可以的。但是,经过一段时间的探索,我觉得需要一段时间来实现一个自定义的布局pipe理器,并且对此有相当的了解。(我看着Dave的post关于构build自定义LayoutManager ) 所以,现在我想我可能只需要使用基于我的需求的ListView的变化,而不是处理自定义布局pipe理器这么复杂。 但是,我只需要使内部的项目重叠。 我觉得可能还有一些我还没有意识到的方向。 请让我知道是否有任何除了上面的ListView varient和自定义布局pipe理器。 我也会在这里发表我的发现。

RecyclerView和适配器数据更新

这是一个关于RecyclerView内部行为的问题,这个行为对于那些熟悉它的机制或愿意深入研究源代码的人来说是一个问题。 我想通过引用来源回答一个答案。 原来的问题 (向下滚动到“换句话说”一个更有针对性的问题) 我需要了解如何notify*行动(例如, notifyItemInserted() )是否入队。 想象一下,我有一个由这个列表备份的适配器: ArrayList<String> list = Arrays.asList("one", "three", "four"); 我想添加zero和two ,这是缺less的值。 例1 list.add(1, "two"); // notify the view adapter.notifyItemInserted(1); // Seconds later, I go on with zero list.add(0, "zero"); // notify the view adapter.notifyItemInserted(0); 这是非常简单明了的,没有什么可说的。 例2 但是如果这两个行动彼此非常接近,而且没有布局之间呢? list.add(1, "two"); list.add(0, "zero”); 我现在应该怎么做? adapter.notifyItemInserted(1); adapter.notifyItemInserted(0); 或者可能 adapter.notifyItemInserted(2); adapter.notifyItemInserted(0); ? 从适配器的angular度来看,列表立即从one, three, […]