标签: android-recyclerview

在RecyclerView中等效ListView.setEmptyView

RecyclerView,我想设置一个空视图,以便在适配器为空时显示.有相同的ListView.setEmptyView()吗?

android recycler-adapter android-recyclerview

86
推荐指数
4
解决办法
4万
查看次数

使用SpanSizeLookup为GridLayoutManager中的项设置范围

我想用节标题实现类似网格的布局.想想https://github.com/TonicArtos/StickyGridHeaders

我现在应该做什么:

mRecyclerView = (RecyclerView) view.findViewById(R.id.grid);
mLayoutManager = new GridLayoutManager(getActivity(), 2);
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                switch(mAdapter.getItemViewType(position)){
                    case MyAdapter.TYPE_HEADER:
                        return 1;
                    case MyAdapter.TYPE_ITEM:
                        return 2;
                    default:
                        return -1;
                }
            }
        });

mRecyclerView.setLayoutManager(mLayoutManager);
Run Code Online (Sandbox Code Playgroud)

现在常规项和标题的跨度大小为1.我该如何解决这个问题?

android android-support-library gridlayoutmanager android-recyclerview

84
推荐指数
2
解决办法
4万
查看次数

将Ripple效果添加到RecyclerView项目

我正在尝试将Ripple Effect添加到RecyclerView的项目中.我在网上看了一下,但找不到我需要的东西.我认为它必须是自定义效果.我已经尝试了android:background属性到RecyclerView本身并将其设置为"?android:selectableItemBackground"但它没有工作:

    <android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:clickable="true"
    android:background="?android:selectableItemBackground"
    android:id="@+id/recyclerView"
    android:layout_below="@+id/tool_bar"/>
Run Code Online (Sandbox Code Playgroud)

这是我试图将效果添加到的RecyclerView:

在此输入图像描述

android android-animation android-recyclerview

83
推荐指数
5
解决办法
6万
查看次数

在RecyclerView中刷新数据并保持其滚动位置

如何刷新显示的数据RecyclerView(调用notifyDataSetChanged其适配器)并确保滚动位置重置到它的确切位置?

在好的情况下,ListView所有需要的是检索getChildAt(0),检查它getTop()setSelectionFromTop在之后使用相同的确切数据进行调用.

在这种情况下似乎不可能RecyclerView.

我想我应该使用它LayoutManager确实提供的scrollToPositionWithOffset(int position, int offset),但是检索位置和偏移的正确方法是什么?

layoutManager.findFirstVisibleItemPosition()layoutManager.getChildAt(0).getTop()

或者是否有更优雅的方式来完成工作?

android android-recyclerview

79
推荐指数
7
解决办法
10万
查看次数

RecyclerView.ViewHolder - getLayoutPosition vs getAdapterPosition

由于新的支持库版本(22.x暂时)的getPosition()的方法RecyclerView.ViewHolder类已被否决代替的主题中提到的方法.我并没有真正理解阅读文档.有人可以解释外行人的条款差异吗?

我有以下用例 - 我给我的适配器a List,并且还希望能够为每个列表项关联额外信息.我有一个位置到额外的映射,并且映射可供持有者使用,以便他们可以获取额外的位置并用它做事.在持有人中,我应该使用哪种方法?

当指数0和1的列表项切换位置时,​​持有者位置会发生什么?这些方法返回了什么?

android android-recyclerview

79
推荐指数
1
解决办法
3万
查看次数

使用ItemTouchHelper.SimpleCallback禁用在RecyclerView中滑动位置

我正在使用recyclelerview 22.2.0和帮助程序类ItemTouchHelper.SimpleCallback来启用我的列表中的轻扫到解除选项.但由于我有一种类型的标题,我需要禁用适配器的第一个位置的滑动行为.由于RecyclerView.Adapter没有isEnabled()方法,我尝试通过ViewHolder创建本身中的方法isEnabled()isFocusable()禁用视图交互,但没有成功.我尝试将滑动阈值调整为完整值,如SimpleCallback方法getSwipeThreshold()中的0f ot 1f,但也没有成功.

我的代码的一些片段可以帮助你帮助我.

我的活动:

@Override
protected void onCreate(Bundle bundle) {
    //... initialization
    ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0,
            ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {

        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
                          RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) {
            if (viewHolder instanceof CartAdapter.MyViewHolder) return 1f;
            return super.getSwipeThreshold(viewHolder);
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {

        }
    };

    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

78
推荐指数
5
解决办法
3万
查看次数

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();
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

从右到左的滑动现在工作正常,但不是相反,我在这里缺少什么?

android horizontal-scrolling android-recyclerview

76
推荐指数
5
解决办法
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 = recyclerView.findChildViewUnder(e.getX(), e.getY());
                if (child != null && clickListener != null) {
                    clickListener.onLongClick(child, recyclerView.getChildPosition(child));
                }
            }
        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

        View child …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

76
推荐指数
4
解决办法
9万
查看次数

RecyclerView中的CheckBox继续检查不同的项目

这是RecyclerView中我的项目的XML

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cvItems"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:layout_margin="2dp"
    card_view:cardElevation="0dp"
    card_view:contentPadding="0dp"
    card_view:cardBackgroundColor="#FFFFFF"
    >

    <LinearLayout
        android:orientation="horizontal"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent">
        <TextView
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:layout_weight="0.8"
            android:id="@+id/tvContent"
            android:textSize="15dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp" />
        <CheckBox
            android:id="@+id/cbSelect"
            android:layout_width="0dip"
            android:layout_weight="0.2"
            android:layout_height="match_parent"
            android:button="@drawable/cb_checked"
            android:gravity="center_horizontal"
            android:textAlignment="center"
            android:layout_gravity="center_horizontal" />
    </LinearLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

这里是RecyclerView适配器,它为每个项目增加了上面的布局:

public class AdapterTrashIncome extends RecyclerView.Adapter<AdapterTrashIncome.ViewHolder> {

    private ArrayList<ObjectIncome> myItems = new ArrayList<>();

    public AdapterTrashIncome(ArrayList<ObjectIncome> getItems, Context context){
        try {
            mContext = context;
            myItems = getItems;
        }catch (Exception e){
            Log.e(FILE_NAME, "51: " + e.toString());
            e.printStackTrace();
        }
    }

    public class ViewHolder extends RecyclerView.ViewHolder { …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview

76
推荐指数
7
解决办法
8万
查看次数

使用RecyclerView适配器更新数据的最佳方法

当我必须使用带有ListView的经典适配器时,我在ListView中更新我的数据,如下所示:

myAdapter.swapArray(data);

public swapArray(List<Data> data) {
  clear();
  addAll(data);
  notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

我想知道RecyclerView的最佳实践是什么.因为在RecyclerView适配器,你不能做clear,并addAllListView控件.

所以我尝试了一下notifyDataSetChanged,但它没有用.然后我尝试在我的视图上使用swapAdapter:

List<Data> data = newData;

MyRecyclerAdapter adapter = new MyRecyclerAdapter(data);

// swapAdapter on my recyclerView (instead of a .setAdapter like with a classic listView).
recyclerViewList.swapAdapter(adapter, false);
Run Code Online (Sandbox Code Playgroud)

但是使用这个最后的解决方案,我仍然需要创建我的适配器的新实例,我觉得它不是最好的解决方案.我应该能够在没有新的情况下更改我的数据MyRecyclerAdapter.

android listview android-adapter android-recyclerview

73
推荐指数
4
解决办法
10万
查看次数