Articles of android recyclerview

在方向更改时,RecyclerView不会从适配器取消注册

我以前在我的Android应用程序中使用ListView ,我最近切换到RecyclerView并观察到它在方向更改时引入了一些内存泄漏。 经过进一步调查,原因显而易见 建立 承载fragment单个activity ,其实例在配置更改时保留。 该fragment在其布局文件中包含一个RecyclerView ,该文件使用自定义adapter填充 钻井 只要为这两个视图中的任何一个设置了Adapter ,它们就会使用适配器注册自己,以监视数据的更改并在UI上进行更新。 ListView在配置更改时取消注册 @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); … if (mAdapter != null && mDataSetObserver != null) { mAdapter.unregisterDataSetObserver(mDataSetObserver); mDataSetObserver = null; } … } 不幸的是, RecyclerView不这样做 @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mItemAnimator != null) { mItemAnimator.endAnimations(); } mFirstLayoutComplete = false; stopScroll(); mIsAttached […]

PopupMenu单击导致RecyclerView滚动

我在Recyclerview的CardView中有一个溢出按钮。 每当我点击按钮时,我会显示一个popup菜单,但RecyclerView也会向下滚动一个项目。 任何人都可以帮我阻止这种不必要的滚动吗? 基本上我试图复制与Playstore中相同的溢出按钮行为。 布局: 适配器: @Override public void onBindViewHolder(final TracksViewHolder tracksViewHolder, int i) { tracksViewHolder.imgBtnOverflow.setTag(i); tracksViewHolder.imgBtnOverflow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Creating the instance of PopupMenu final int position = (Integer) v.getTag(); PopupMenu popup = new PopupMenu(mContext,tracksViewHolder.imgBtnOverflow); //Inflating the Popup using xml file popup.getMenuInflater() .inflate(R.menu.popup_menu_overflow, popup.getMenu()); //registering popup with OnMenuItemClickListener popup.setOnMenuItemClickListener(new […]

在轻扫上的RecyclerView ItemTouchHelper按钮

我正在尝试将一些iOSfunction移植到Android。 我打算创建一个表格,向左滑动显示2按钮:编辑和删除。 我一直在玩它,我知道我很亲密。 秘密真正在于OnChildDraw方法。 我想绘制一个适合文本删除的Rect,然后用它们各自的背景颜色绘制除此之外的Edit文本。 单击时剩余的空白区域应将行恢复到其初始位置。 我已设法在用户滑动到两侧时绘制背景但我不知道如何添加侦听器,一旦将其滑到一侧,拖动function开始行为exception。 我正在研究Xamarin,但纯java解决方案也被接受,因为我可以轻松地将它们移植到c#。 public class SavedPlacesItemTouchHelper : ItemTouchHelper.SimpleCallback { private SavedPlacesRecyclerviewAdapter adapter; private Paint paint = new Paint(); private Context context; public SavedPlacesItemTouchHelper(Context context, SavedPlacesRecyclerviewAdapter adapter) : base(ItemTouchHelper.ActionStateIdle, ItemTouchHelper.Left) { this.context = context; this.adapter = adapter; } public override bool OnMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { return false; } […]

在onCreateViewHolder中获取View的位置

我正在使用带有ImageView和TextView的单行布局的RecyclerView。 我想为View实现一个OnClickListener,而不是为单独的ViewHolder对象实现。 如何在适配器中获取视图的位置? 现在我正在删除点击的评论,但我无法选择点击的视图。 我在适当的行中添加了一个TODO。 public class CommentAdapter extends RecyclerView.Adapter { /** List of Comment objects */ private List mCommentList; /** Database with Comment objects */ private CommentsDataSource mDataSource; /** * Construcutor for CommentAdapter * * @param commentList List of Comment objects * @param dataSource Database with Comment objects */ public CommentAdapter(List commentList, CommentsDataSource dataSource) […]

Android – 将搜索filter实施到RecyclerView

我需要在我的RecyclerView上实现基于EditText的搜索function,列表必须在typng时进行过滤 这是代码: DisplayAdapter.java这是适配器 public class DisplayAdapter extends RecyclerView.Adapter{ private List displayedList; public class MyViewHolder extends RecyclerView.ViewHolder{ public TextView english_d; public MyViewHolder(View view){ super(view); english_d = (TextView) view.findViewById(R.id.engword); } } public DisplayAdapter(List displayedList){ this.displayedList = displayedList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int position) { // create a layout View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false); return […]

Android recyclelerView findViewHolderForAdapterPosition返回null

我想以编程方式单击recyclelerView中的项目,我find了一种方法 : recyclerView.findViewHolderForAdapterPosition(0).itemView.performClick(); 但它对我不起作用,findViewHolderForAdapterPosition只返回null。 我在代码中遗漏了什么吗? HistoryListAdapter: public class HistoryListAdapter extends RecyclerView.Adapter { private static ArrayList recordItems; private static FragmentActivity activity; private static RecordList recordList; public HistoryListAdapter(ArrayList recordItems, FragmentActivity FA, RecordList FRL) { this.recordItems = recordItems; this.activity = FA; this.recordList = FRL; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view […]

如何以编程方式设置recyclerview的高度?

我试过了, recyclerview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,100)); 但它不起作用。

使用RecyclerView和卡

我有一些带有卡片物品的RecyclerView。 在preLollipop设备上它看起来很好。 但是在Lollipop上,它看起来没有任何子卡之间的间隔。 我试图使用保证金和填充,但它没有帮助。 当我在棒棒糖上使用保证金时,它看起来很好,但是在preLollipop间距相同的余量非常大。 再一次:为什么会有不同的间距? 我应该使用哪个属性来修复它?

如何禁用回收器视图滚动以便它侦听Scrollview布局?

我在ScrollView中有一个回收站视图。 我想禁用回收器视图滚动,以便它侦听其父布局,一个ScrollView!

我希望我的RecyclerView不回收一些物品

我正在使用内部具有异构视图的RecyclerView , 如本教程中所示 。 我在RecyclerView里面有一些物品也是RecyclerViews。 难以想象? 假设我想要复制Play商店的布局:一个具有垂直线性布局的大型RecyclerView,并由许多元素填充:单个应用程序和应用程序轮播。 如果要添加的项目是单个应用程序的布局,则将使用ID 1,我将添加单个项目的布局。 另外,如果我需要添加一个Carousel,那么我将在主RecyclerView中添加一个元素:另一个带有自己的适配器的RecyclerView。 这非常有效。 除非您滚动主RecyclerView。 为什么? 因为某些视图在不再可见时被销毁,然后在onBindViewHolder()方法中重新创建。 为什么在这? 因为主RecyclerView的适配器正在传递位置X,然后调用OnBindViewHolder() 。 然后,后者创建一个具有自己的适配器的新RecyclerView并将其分配给它。 我想保留这些观点只是因为它们每次重新充气都很重要。 这可能吗? 如果是的话,你能告诉我怎么样吗?