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 […]

RecyclerView适配器采取错误的值

我有一个RecyclerView这显示了两种View一个代表一个用户发布和另一个代表一个事件发布。 两者都有共同的元素,例如显示时间戳的TextView 。 所以我创build了一个将此TextView时间戳记到一个variables并加载它的PublicationViewHolder 。 我的问题是,适配器,最初加载正确的值,但是当我向下滚动,再次向上滚动,位置中的值由另一个位置的值更改。 这里是代码: public class PublicationViewHolder extends RecyclerView.ViewHolder { private TextView vTimeStamp; public PublicationViewHolder(View itemView) { super(itemView); this.vTimeStamp = (TextView) itemView.findViewById(R.id.txt_view_publication_timestamp); } public void load(Publication publication, int i) { load(publication); try { if (Publication.TYPE_USER_PUBLICATION == publication.getType()) { load((UserPublication) publication); } else if (Publication.TYPE_EVENT_PUBLICATION == publication.getType()) { load((EventPublication) publication); } } catch […]

StaggeredGridLayoutManager和移动项目

我创build了一个非常简单的项目,通过recyclerview显示28个StaggeredGridLayoutManager的图像。 但是当我滚动recyclerview时,它会将项目从左向右移动,或者交换左右列。 代码: import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; public class MainActivity extends Activity { String mImageDir; private RecyclerView mRecyclerView; private StaggeredGridLayoutManager mLayoutManager; MyRecyclerAdapter myRecyclerAdapter; List<ImageModel> mImageList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (RecyclerView)findViewById(R.id.recyclerview_rootview); mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); mLayoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setHasFixedSize(false); mImageList = new ArrayList<ImageModel>(); […]