标签: android-recyclerview

Android Recyclerview与ListView一起使用Viewholder

我最近遇到了RecycleViewAndroid 5.0发布的android ,它似乎RecycleView只是一个封装的传统ListView,其中包含了ViewHolder模式,它促进了视图的重用,而不是每次都创建它.

使用的其他好处是RecycleView什么?如果两者在性能方面具有相同的效果,为什么会选择使用RecycleView`?

编辑

我发现人们提出了类似的问题并且答案没有定论,在这里添加它们以保存记录.

Recyclerview与Listview

我们应该使用RecyclerView来取代ListView吗?

为什么RecyclerView没有onItemClickListener()?和RecyclerView如何与Listview不同?

performance android listview android-recyclerview

142
推荐指数
3
解决办法
10万
查看次数

RecyclerView展开/折叠项目

我想扩展/折叠我的recyclerView的项目,以显示更多信息.我想实现SlideExpandableListView的相同效果.

基本上在我的viewHolder中我有一个不可见的视图,我想做一个平滑的展开/折叠动画,而不是只将可见性设置为VISIBLE/GONE.我一次只需要一个项目进行扩展,如果有一个高程来显示该项目已被选中,那将会很酷.

它与新Android最近通话记录列表的效果相同.选项"CALL BACK"和"DETAILS"仅在选择项目时可见.

RecyclerView可扩展项目

expand android android-layout recycler-adapter android-recyclerview

137
推荐指数
7
解决办法
14万
查看次数

Recyclerview不会调用onCreateViewHolder

RecyclerView不打电话onCreateViewHolder,onBindViewHolder即使是MenuViewHolder构造函数,因此没有出现RecyclerView.我把日志用于调试,没有显示日志.可能是什么问题?

我的适配器:

public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> {
private LayoutInflater inflater;
List<Menu> data = Collections.emptyList();

public MenuAdapter(Context context, List<Menu> data) {
    Log.i("DEBUG", "Constructor");
    inflater = LayoutInflater.from(context);
    Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString());
    this.data = data;
    for(Menu menu: this.data){
        Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu);
    }
}

@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.row_menu, parent, false);
    MenuViewHolder holder = new MenuViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MenuViewHolder …
Run Code Online (Sandbox Code Playgroud)

java android android-recyclerview

135
推荐指数
9
解决办法
7万
查看次数

简单的Android RecyclerView示例

我使用Android制作了几次项目列表RecyclerView,但这是一个相当复杂的过程.通过众多教程中的一个在线工作(这个,这个,很好),但我正在寻找一个简单的例子,我可以复制和粘贴以快速启动和运行.只需要以下功能:

  • 垂直布局
  • 每行一个TextView
  • 响应点击事件

因为我多次希望这样,所以我最终决定在下面给出答案以供我将来参考和你的.

android android-recyclerview

133
推荐指数
6
解决办法
15万
查看次数

如何在RecyclerView上正确突出显示所选项目?

我正在尝试使用a RecyclerView作为横向ListView.我试图弄清楚如何突出显示所选项目.当我点击其中一个项目时,它会被选中并正确突出显示,但是当我点击另一个项目时,第二个项目会被旧项目突出显示.

这是我的onClick函数:

@Override
public void onClick(View view) {

    if(selectedListItem!=null){
        Log.d(TAG, "selectedListItem " + getPosition() + " " + item);
        selectedListItem.setBackgroundColor(Color.RED);
    }
    Log.d(TAG, "onClick " + getPosition() + " " + item);
    viewHolderListener.onIndexChanged(getPosition());
    selectedPosition = getPosition();
    view.setBackgroundColor(Color.CYAN); 
    selectedListItem = view;
}
Run Code Online (Sandbox Code Playgroud)

这是onBindViewHolder:

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {   
    viewHolder.setItem(fruitsData[position]);
    if(selectedPosition == position)
        viewHolder.itemView.setBackgroundColor(Color.CYAN);    
    else
        viewHolder.itemView.setBackgroundColor(Color.RED);

}
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

131
推荐指数
6
解决办法
17万
查看次数

Android RecyclerView:notifyDataSetChanged()IllegalStateException

我正在尝试使用notifyDataSetChanged()更新recycleview的项目.

这是我在recycleview适配器中的onBindViewHolder()方法.

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {

     //checkbox view listener
    viewHolder.getCheckbox().setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            //update list items
            notifyDataSetChanged();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我选中一个复选框后,我想要做的是更新列表项.我得到了一个非法的例外:"Cannot call this method while RecyclerView is computing a layout or scrolling"

java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling
    at android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:1462)
    at android.support.v7.widget.RecyclerView$RecyclerViewDataObserver.onChanged(RecyclerView.java:2982)
    at android.support.v7.widget.RecyclerView$AdapterDataObservable.notifyChanged(RecyclerView.java:7493)
    at android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:4338)
    at com.app.myapp.screens.RecycleAdapter.onRowSelect(RecycleAdapter.java:111)
Run Code Online (Sandbox Code Playgroud)

我也使用了notifyItemChanged(),同样的例外.任何秘密的更新方式,以通知适配器的东西发生了变化?

android android-recyclerview

128
推荐指数
10
解决办法
8万
查看次数

Android RecyclerView添加和删除项目

我有一个带有TextView文本框和十字按钮ImageView的RecyclerView.我在recyclerview外面有一个按钮,使十字按钮ImageView可见/消失.

我正在寻找从recylerview中删除项目,当按下该项目交叉按钮ImageView时.

我的适配器:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener {

    private ArrayList<String> mDataset;
    private static Context sContext;

    public MyAdapter(Context context, ArrayList<String> myDataset) {
        mDataset = myDataset;
        sContext = context;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, parent, false);

        ViewHolder holder = new ViewHolder(v);
        holder.mNameTextView.setOnClickListener(MyAdapter.this);
        holder.mNameTextView.setOnLongClickListener(MyAdapter.this);

        holder.mNameTextView.setTag(holder);

        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

        holder.mNameTextView.setText(mDataset.get(position));

    }

    @Override
    public int getItemCount() {
        return mDataset.size();
    }


    @Override
    public void onClick(View view) { …
Run Code Online (Sandbox Code Playgroud)

java user-interface android selection android-recyclerview

127
推荐指数
6
解决办法
21万
查看次数

将recyclerview与数据库一起使用

目前没有可用的RecyclerView.Adapter的默认实现.

可能正式发布,谷歌将添加它.

由于不存在用于支持CursorAdapterRecyclerView当前,如何才能使用RecyclerView同一个数据库?有什么建议 ?

android simplecursoradapter android-recyclerview

126
推荐指数
3
解决办法
8万
查看次数

Recyclerview和处理不同类型的行通胀

我正在尝试使用新的RecyclerView,但我找不到一个RecyclerView不同类型的行/卡片视图被夸大的例子.

随着ListView我覆盖getViewTypeCountgetItemViewType,用于处理不同类型的行.

我应该像"旧"方式那样做,还是应该做点什么LayoutManager?我想知道是否有人可以指出我正确的方向.因为我只能找到一种类型的例子.

我想要一张略有不同卡片的清单.或者我应该只使用一个scrollViewcardViews它里面......度过,即使没有适配器和recyclerView

android listview android-recyclerview

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

RecyclerView - 在特定位置获取视图

我有一个RecyclerView和一个活动ImageView.我正在使用它RecyclerView来水平显示图像列表.当我在点击图片RecyclerViewImageView在活动中应显示图像的大局观.到目前为止一切正常.

现在活动还有两个ImageButtons:imageButton_leftimageButton_right.当我点击时imageButton_left,该图像ImageView应向左转,并且该缩略图RecyclerView应反映此更改.情况类似imageButton_right.

我能够旋转ImageView.但是,我怎么能旋转缩略图RecyclerView?我如何获得ViewHolderImageView

码:

活动XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/original_image"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:scaleType="fitXY"
            android:src="@drawable/image_not_available_2" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:gravity="center_horizontal"
            android:orientation="horizontal">


            <ImageButton
                android:id="@+id/imageButton_left"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="20dp"
                android:background="@drawable/rotate_left_icon" />

            <ImageButton
                android:id="@+id/imageButton_right"
                android:layout_width="wrap_content" …
Run Code Online (Sandbox Code Playgroud)

java android position widget android-recyclerview

123
推荐指数
9
解决办法
14万
查看次数