Questions tagged «android-recyclerview»

RecyclerView小部件是ListView和GridView的更高级,更灵活的版本。


7
RecyclerView水平滚动对齐中心
我正在尝试使用RecyclerView在此处制作类似于旋转木马的视图,我希望该项目在滚动时可以一次捕捉到屏幕中间。我试过使用recyclerView.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING); 但是视图仍然可以平滑滚动,我还尝试过使用滚动侦听器实现自己的逻辑,如下所示: recyclerView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); Log.v("Offset ", recyclerView.getWidth() + ""); if (newState == 0) { try { recyclerView.smoothScrollToPosition(layoutManager.findLastVisibleItemPosition()); recyclerView.scrollBy(20,0); if (layoutManager.findLastVisibleItemPosition() >= recyclerView.getAdapter().getItemCount() - 1) { Beam refresh = new Beam(); refresh.execute(createUrl()); } } catch (Exception e) { e.printStackTrace(); } …

2
RecyclerView.ViewHolder-getLayoutPosition与getAdapterPosition
由于新的支持库版本(22.x暂时)的getPosition()的方法RecyclerView.ViewHolder类已被否决代替的主题中提到的方法。我阅读文档并没有真正的区别。有人可以解释外行用语的区别吗? 我有以下用例-我给适配器一个List,并且还希望能够为每个列表项关联额外的信息。我有一个位置到外部的映射,该映射可供持有者使用,以便他们可以获取自己的额外职位并对其进行处理。在持有人中,我应该使用哪种方法? 切换索引0和1的列表项时,持有者的位置会发生什么?方法返回什么?

15
Android RecyclerView滚动性能
我已经基于“创建列表和卡片”指南创建了RecyclerView示例。我的适配器具有仅用于扩大布局的模式实现。 问题是滚动性能差。这在RecycleView中只有8个项目。 在某些测试中,我验证了在Android L中不会发生此问题。但是在KitKat版本中,性能下降是显而易见的。

8
Android使用gridlayoutmanager在recyclerview中的最后一个元素下方添加间距
我试图在增加最后一个元件行下面的间距RecyclerView有GridLayoutManager。ItemDecoration为此,我将custom用于底部填充,如下所示: public class SpaceItemDecoration extends RecyclerView.ItemDecoration { private int space; private int bottomSpace = 0; public SpaceItemDecoration(int space, int bottomSpace) { this.space = space; this.bottomSpace = bottomSpace; } public SpaceItemDecoration(int space) { this.space = space; this.bottomSpace = 0; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) …

7
在RecyclerView中的行内单击处理按钮
我正在使用以下代码来处理行点击。(来源) static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { private GestureDetector gestureDetector; private ClickListener clickListener; public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) { this.clickListener = clickListener; gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } @Override public void onLongPress(MotionEvent e) { View child …

11
如何知道RecyclerView / LinearLayoutManager是滚动到顶部还是底部?
目前,我正在使用以下代码来检查是否应启用SwipeRefreshLayout。 private void laySwipeToggle() { if (mRecyclerView.getChildCount() == 0 || mRecyclerView.getChildAt(0).getTop() == 0) { mLaySwipe.setEnabled(true); } else { mLaySwipe.setEnabled(false); } } 但这是问题所在。滚动到另一个项目的视图边界时,它mRecyclerView.getChildAt(0).getTop()也会返回0。 是否有类似RecyclerView.isScrolledToBottom()或RecyclerView.isScrolledToTop()? 编辑:(mRecyclerView.getChildAt(0).getTop() == 0 && linearLayoutManager.findFirstVisibleItemPosition() == 0)有点RecyclerView.isScrolledToTop(),但是呢RecyclerView.isScrolledToBottom()?

2
有没有更好的方法来从适配器获取对父RecyclerView的引用?
我有一个用例,需要RecyclerView从适配器内部(特别是在onBindViewHolder方法内部)对父级进行引用。到目前为止,我正在做的就是将它分配给argonCreateViewHolder传递的方法中的私有类成员,viewGroup parent如下所示: private ViewGroup mParent; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // inflater logic. mParent = parent; } 并引用父RecyclerView在onBindViewHolder这样的: @Override public void onBindViewHolder(ViewHolder holder, int position) { // binder logic. ((RecyclerView)mParent).blahBlahBlah(); } 有更好的方法吗?也许RecyclerView.Adapter有一种我可能错过的方式?

8
在Android中将notifyItemRemoved或notifyDataSetChanged与RecyclerView一起使用
我正在创建一个卡片列表以使用RecyclerView显示,其中每个卡片都有一个按钮,用于从列表中删除该卡片。 当我使用notifyItemRemoved()删除RecyclerView中的卡时,它将删除该项目并设置动画效果,但是列表中的数据未正确更新。 如果不是那样,我切换到notifyDataSetChanged(),则列表中的项目将被删除并正确更新,但随后这些卡将不进行动画处理。 有人在使用notifyItemRemoved()方面有任何经验,并且知道为什么它的行为与notifyDataSetChanged不同吗? 这是我正在使用的一些代码: private List<DetectedIssue> issues = new ArrayList<DetectedIssue>(); @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { // - get element from your dataset at this position // - replace the contents of the view with that element if(position >0){ RiskViewHolder riskHolder = (RiskViewHolder)holder; final int index = …

12
回收者视图:检测到不一致。无效的视图支架适配器positionViewHolder
Recycler View Inconsistency检测到错误,快速滚动时或加载更多项目时滚动。 FATAL EXCEPTION: main Process: com.pratap.endlessrecyclerview, PID: 21997 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{56a082c position=40 id=-1, oldPos=39, pLpos:39 scrap [attachedScrap] tmpDetached no parent} at android.support.v7.widget.RecyclerView$Recycler.validateViewHolderForOffsetPosition(RecyclerView.java:4251) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4382) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2864) at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1445) at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:144) at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:282) at …

15
Recyclerview在滚动期间更改项目
我有一个RecyclerView。每行都有一个播放按钮,textview和Progressbar。当单击“播放”按钮时,必须播放sdcard中的音频并必须进度条。问题是,当我向下滚动recyclerview时,更改下一行的进度条。这意味着我一次可以在屏幕上容纳5个项目。当我滚动到第六行时,第六行搜索栏突然改变。 public class ListAdapter extends RecyclerView.Adapter { private List<Historyitem> stethitems; public Context mContext; public Activity activity; public Handler mHandler; static MediaPlayer mPlayer; static Timer mTimer; public ListAdapter(Activity activity,Context mContext,List<Historyitem> stethitems) { this.stethitems = stethitems; this.mContext = mContext; this.activity = activity; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View …

13
在RecyclerView中保存EditText内容
我有清单项目,EditText不知道会有多少项目。当我输入一些文本EditText然后向下滚动时RecyclerView,我遇到了问题,再向上滚动后,我的第一个没有文本EditText。 我想知道什么以及应该在哪里编写代码,以便在用户键入或完成键入(我当时想使用TextWatcher)时EditText,文本将保存到文件中(我将其保存在中)。外部存储中的txt文件) 我应该onCreate在活动的方法中还是在适配器类中或其他地方这样做吗? 这是一些代码 主要活动代码 public class MainActivity extends Activity { RecyclerView mRecyclerView; MyAdapter mAdapter; String[] mDataSet= new String[20]; @Override protected void onCreate(Bundle savedInstanceState) { // generating text for editText Views for (int i = 0; i<=19; i++){ mDataSet[i]= "EditText n: "+i; } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); mAdapter …

9
RecyclerView在最后一项之后删除分隔器/装饰器
我有一个非常简单的RecyclerView。 这是我设置分隔符的方式: DividerItemDecoration itemDecorator = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL); itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.news_divider)); recyclerView.addItemDecoration(itemDecorator); 这是drawable/news_divider.xml: <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/white_two"/> <size android:height="1dp"/> </shape> 问题是由于某种原因,分隔符不只是在项目之间创建。而且在最后一项之后。我只希望在项目之间,而不是在每个项目之后。 任何想法如何防止分隔线显示在最后一项之后?

8
为什么在RecyclerView.Adapter的onBindViewHolder中添加OnClickListener被认为是不好的做法?
我有一个RecyclerView.Adapter类的以下代码,它工作正常: public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Viewholder> { private List<Information> items; private int itemLayout; public MyAdapter(List<Information> items, int itemLayout){ this.items = items; this.itemLayout = itemLayout; } @Override public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false); return new Viewholder(v); } @Override public void onBindViewHolder(Viewholder holder, final int …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.