显示单个项目的回收站视图

Posted

技术标签:

【中文标题】显示单个项目的回收站视图【英文标题】:Recycler view showing single item 【发布时间】:2016-08-03 06:04:22 【问题描述】:

我遇到了一个奇怪的错误,recyclerview 只显示一个项目。下面是我的 recyclerview 适配器的代码:

public class ChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> 


List<chat> chats;
String username;
final int My=0,Their=1;

public ChatAdapter(List<chat> chats) 
    this.chats = chats;
    this.username = PushApp.getApp().getSPF().getStringData(Constants.ANAME);



@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    RecyclerView.ViewHolder viewHolder;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());

    switch (viewType) 
        case My:
            View v1 = inflater.inflate(R.layout.my_chat_child, parent, false);
            viewHolder = new MyChatHolder(v1);
            break;
        case Their:
            View v2 = inflater.inflate(R.layout.their_chat_child, parent, false);
            viewHolder = new TheirMessageHolder(v2);
            break;
        default:
            View v = inflater.inflate(R.layout.my_chat_child, parent, false);
            viewHolder = new MyChatHolder(v);
            break;
    

    return viewHolder;



@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) 
    switch (holder.getItemViewType()) 
        case My:
            MyChatHolder myChatHolder = (MyChatHolder) holder;
            myChatHolder.setMyMessage(chats.get(position).getMessage());
            break;

        case Their:
            TheirMessageHolder theirMessageHolder = (TheirMessageHolder) holder;
            theirMessageHolder.setTheirChat(chats.get(position).getFrom(), chats.get(position).getMessage());
            break;
    


@Override
public int getItemViewType(int position) 
    if(username.equalsIgnoreCase(chats.get(position).getFrom()))
        return My;
    return Their;


@Override
public int getItemCount() 
    return chats.size();

我已经在其他应用程序中使用过此代码,并且运行良好。我检查了聊天数据,也很完美。

这里是 git repo 布局文件的链接: layout files

【问题讨论】:

@OShiffer 我已经添加了 git repo 链接 尝试在布局中设置wrap_content 而不是match_parent 的高度和宽度github.com/revic1993/androidchat/blob/master/app/src/main/res/… github.com/revic1993/androidchat/blob/master/app/src/main/res/… @Slavik 谢谢它的工作! 【参考方案1】:

不要使用match_parent 作为项目视图的高度。一项垂直填满整个屏幕,因此您看不到另一项。

【讨论】:

Google 请添加一些 Lint 警告,这次让你烦人的 lint 有用! 哦,谢谢,了不起的人,在我的例子中,我创建了 match_parent 作为高度的项目。因此,所有屏幕都保留在第一项之后。 让我给你买杯咖啡!你救了我的理智!谢谢! 对我不起作用。只有将Button 放在RecyclerView 之前,才会显示所有项目。有什么建议吗? ***.com/questions/35906652/…【参考方案2】:

当您为 recyclerview 创建 row.xml 时,应遵循以下几点:

    始终使用“wrap_content”作为行高,否则在“match_parent”中它将占据整个屏幕的单行。

    你也可以用dp取高度。

【讨论】:

我有同样的问题尝试滚动并看到了其余的项目【参考方案3】:

我的错误是我不小心使用了:

LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)

代替:

LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)

【讨论】:

这也是我的错误。谢谢你。【参考方案4】:

尝试将项目视图中使用的布局更改为FrameLayout。这是一个例子。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item"
    android:layout_
    android:layout_
    android:clickable="true"
    android:focusable="true"
    android:foreground="?selectableItemBackground">

    <TextView
        android:id="@+id/textView"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"/>
</FrameLayout>

【讨论】:

【参考方案5】:

content_main.xml如下

android:layout_
android:layout_

在 row_list.xml 文件中进行以下更改

android:layout_
android:layout_

我做了上面的更改,它运行。

【讨论】:

【参考方案6】:

检查日志后,确保列表中添加了多个项目,但在 UI 中仅显示 1 个项目意味着检查此属性。 在 item_xml 文件中将属性更改为

正确的方法

 android:layout_
 android:layout_

方法错误

 android:layout_
 android:layout_

【讨论】:

【参考方案7】:

我今天遇到这个问题,1001 分钟后,我发现这是来自 RecyclerView 中的这一行:

android:layout_marginTop="10dp"

我的 RecyclerView 放在 NestedScrollView 里面,我认为这是间接原因。 所以我把这里放在这里让其他人遇到同样的问题。 here the image

【讨论】:

【参考方案8】:

1) 如果你的 recyclerview 是垂直的,那么设置 recyclerview 的高度 match_parentrow_item.xml 高度也 match_parent

2) 如果您的回收站视图是水平的,则设置回收站视图的宽度match_parentrow_item.xml 宽度也设置match_parent

例如:- 水平回收视图

<android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_
        android:layout_
        android:layout_marginLeft="60dp"
        android:layout_marginRight="60dp" />

row_item.xml

<TextView
android:layout_
android:layout_
android:layout_marginBottom="5dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:background="@drawable/rect"
android:gravity="center"
android:maxLines="2"
android:padding="10dp"
android:textColor="@color/white"
android:textSize="25sp" />

【讨论】:

以上是关于显示单个项目的回收站视图的主要内容,如果未能解决你的问题,请参考以下文章

通过单击单个项目选择Recycler视图中的所有项目

显示更多/查看回收站视图中的所有项目 [关闭]

回收站视图未在 Fragment (Android) 上显示项目

如何在 RecyclerView 中选择和取消选择项目?如何仅在回收站视图中突出显示所选项目?

在回收站视图中显示不同大小的多个图像

我可以添加两个不同的回收器视图单个元素布局一个回收器视图[重复]