我最近遇到了RecycleView
Android 5.0发布的android ,它似乎RecycleView
只是一个封装的传统ListView
,其中包含了ViewHolder模式,它促进了视图的重用,而不是每次都创建它.
使用的其他好处是RecycleView
什么?如果两者在性能方面具有相同的效果,为什么会选择使用RecycleView`?
编辑
我发现人们提出了类似的问题并且答案没有定论,在这里添加它们以保存记录.
我们应该使用RecyclerView来取代ListView吗?
为什么RecyclerView没有onItemClickListener()?和RecyclerView如何与Listview不同?
我想扩展/折叠我的recyclerView的项目,以显示更多信息.我想实现SlideExpandableListView的相同效果.
基本上在我的viewHolder中我有一个不可见的视图,我想做一个平滑的展开/折叠动画,而不是只将可见性设置为VISIBLE/GONE.我一次只需要一个项目进行扩展,如果有一个高程来显示该项目已被选中,那将会很酷.
它与新Android最近通话记录列表的效果相同.选项"CALL BACK"和"DETAILS"仅在选择项目时可见.
expand android android-layout recycler-adapter android-recyclerview
我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) 我正在尝试使用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) 我正在尝试使用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(),同样的例外.任何秘密的更新方式,以通知适配器的东西发生了变化?
我有一个带有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) 目前没有可用的RecyclerView.Adapter的默认实现.
可能正式发布,谷歌将添加它.
由于不存在用于支持CursorAdapter
与RecyclerView
当前,如何才能使用RecyclerView
同一个数据库?有什么建议 ?
我正在尝试使用新的RecyclerView
,但我找不到一个RecyclerView
不同类型的行/卡片视图被夸大的例子.
随着ListView
我覆盖getViewTypeCount
和getItemViewType
,用于处理不同类型的行.
我应该像"旧"方式那样做,还是应该做点什么LayoutManager
?我想知道是否有人可以指出我正确的方向.因为我只能找到一种类型的例子.
我想要一张略有不同卡片的清单.或者我应该只使用一个scrollView
与cardViews
它里面......度过,即使没有适配器和recyclerView
?
我有一个RecyclerView
和一个活动ImageView
.我正在使用它RecyclerView
来水平显示图像列表.当我在点击图片RecyclerView
将ImageView
在活动中应显示图像的大局观.到目前为止一切正常.
现在活动还有两个ImageButtons
:imageButton_left
和imageButton_right
.当我点击时imageButton_left
,该图像ImageView
应向左转,并且该缩略图RecyclerView
应反映此更改.情况类似imageButton_right
.
我能够旋转ImageView
.但是,我怎么能旋转缩略图RecyclerView
?我如何获得ViewHolder
的ImageView
?
码:
活动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)