RecyclerView 只显示一项

Posted

技术标签:

【中文标题】RecyclerView 只显示一项【英文标题】:RecyclerView show only one item 【发布时间】:2022-01-03 15:58:30 【问题描述】:

我有一个问题,我想在我的第二个 Activity 中显示一个列表,但它只显示最后一个项目,而不是前一个项目。我需要在 Activity 上显示我的所有项目。

我需要做什么才能全部显示?

我的活动:

    mRecyclerView = (RecyclerView)findViewById(R.id.home_recyclerview_pokemonname);

    mPokemonList = new ArrayList<>();

    mPokemonList.add(new MyPokemonBank("Pikachu", "Electrik"));
    mPokemonList.add(new MyPokemonBank("Dracaufeu", "Feu"));
    mPokemonList.add(new MyPokemonBank("Miaouss", "Normal"));

    mAdapter = new MyPokemonAdapter(mPokemonList);

    mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false));
    mRecyclerView.setAdapter(mAdapter);

我的适配器:

public class MyPokemonAdapter extends RecyclerView.Adapter<MyPokemonAdapter.MyViewHolder> 

ArrayList<MyPokemonBank> mPokemonList;

MyPokemonAdapter(ArrayList<MyPokemonBank> mPokemonList)
    this.mPokemonList = (ArrayList<MyPokemonBank>) mPokemonList;


@NonNull
@Override
public MyPokemonAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    View view = layoutInflater.inflate(R.layout.pokemon_bank, parent, false);
    return new MyViewHolder(view);


@Override
public void onBindViewHolder(@NonNull MyPokemonAdapter.MyViewHolder holder, int position) 
    holder.display(mPokemonList.get(position));


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


public class MyViewHolder extends RecyclerView.ViewHolder

    private TextView mPokemonName;
    private TextView mPokemonType;

    public MyViewHolder(@NonNull View itemView) 
        super(itemView);

        mPokemonName = (TextView)itemView.findViewById(R.id.name);
        mPokemonType = (TextView)itemView.findViewById(R.id.type);
    

    public void display(MyPokemonBank myPokemonBank) 

        this.mPokemonName.setText(MyPokemonBank.getName());
        this.mPokemonType.setText(MyPokemonBank.getType());

    


【问题讨论】:

检查尺寸mPokemonList.size(). 你能分享你的视图xml文件吗? 我已经用我的 2 xml 发布了答案 【参考方案1】:

不要将match_parent 高度用于您的回收站视图项目视图。因为一个项目填满了整个屏幕,所以你看不到另一个。

【讨论】:

我不在 layout_weight 中使用 match_parent。我使用 wrap_content @Ariakah : 请检查 recyclerview 列表项 xml。 我已经用我的 2 xml 发布了一个答案【参考方案2】:

正如@Mehul Kabaria 所说,问题在于您的项目视图的布局。 pokemon_bank.xml 中的根视图将 layout_widthlayout_height 设置为 match_parent

所以实际上你所有的项目都显示出来了,如果你滚动,你会看到它们在那里。但是每个项目都填满了整个屏幕,看起来好像只显示了一个项目。

pokemon_bank.xml中根视图的宽高尺寸改为wrap_content或固定尺寸。

<androidx.appcompat.widget.LinearLayoutCompat 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical">

<TextView
    android:id="@+id/name"
    android:layout_
    android:layout_
    android:padding="10dp"
    android:textSize="18sp"
    android:text="Pikachu">
</TextView>

<TextView
    android:id="@+id/type"
    android:layout_
    android:layout_
    android:gravity="bottom|end"
    android:padding="10dp"
    android:text="Electrik">
</TextView>
</androidx.appcompat.widget.LinearLayoutCompat>

根据您将 LinearLayoutManager 用于垂直列表还是水平列表,您可以将宽度设置为match_parent

编辑:

此外,您在将模型数据绑定到 RecyclerView 适配器中的项目视图时似乎存在错误: 这里使用静态方法从 MyPokemonBank 类中获取值。

public void display(MyPokemonBank myPokemonBank) 

    this.mPokemonName.setText(MyPokemonBank.getName());
    this.mPokemonType.setText(MyPokemonBank.getType());


相反,他们应该使用参数(小写myPokemonBank):

public void display(MyPokemonBank myPokemonBank) 

    this.mPokemonName.setText(myPokemonBank.getName());
    this.mPokemonType.setText(myPokemonBank.getType());


【讨论】:

我使用了你的代码,我看到了 3 个项目,但这是 3 上的同一个项目:/ @Ariakah 我更新了我的答案 没有变化。同样的问题:/【参考方案3】:

代替这一行:

mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false));

试试这个希望对你有用

mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

【讨论】:

您的代码不起作用。 AS 告诉我这个错误:错误:')' 预期 mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()); 我忘了右括号,请立即尝试 同样的问题,我的 2 TextView 与您的代码不在同一行 在 pokemon_bank.xml 文件中的根布局是什么?你应该使用具有水平方向的LinearLayout,这样它就会在同一个linne中显示你的textview 我已经用我的 2 个 XML 代码发布了答案。我已经更新写“orientation="horizo​​ntal" 但同样的问题。只有一项【参考方案4】:

这是我的第二个活动 XML:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/home_recyclerview_pokemonname"
    android:layout_
    android:layout_
    android:orientation="vertical">
</androidx.recyclerview.widget.RecyclerView>

和 pokemon_bank.xml

<androidx.appcompat.widget.LinearLayoutCompat 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical">

<TextView
    android:id="@+id/name"
    android:layout_
    android:layout_
    android:padding="10dp"
    android:textSize="18sp"
    android:text="Pikachu">
</TextView>

<TextView
    android:id="@+id/type"
    android:layout_
    android:layout_
    android:gravity="bottom|end"
    android:padding="10dp"
    android:text="Electrik">
</TextView>
</androidx.appcompat.widget.LinearLayoutCompat>

【讨论】:

pokemon_bank.xml 中使用的根布局是什么? 我用根布局编辑我的帖子【参考方案5】:

我检查了您的布局代码,问题出在您的 pokemon_bank.xml 中。您需要从 match_parent 更改为 wrap_content 到您的线性布局兼容,这样才能正常工作。

    <androidx.appcompat.widget.LinearLayoutCompat
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical">

    <TextView
        android:id="@+id/name"
        android:layout_
        android:layout_
        android:padding="10dp"
        android:textSize="18sp"
        android:text="Pikachu">
    </TextView>

    <TextView
        android:id="@+id/type"
        android:layout_
        android:layout_
        android:gravity="bottom|end"
        android:padding="10dp"
        android:text="Electrik">
    </TextView>
</androidx.appcompat.widget.LinearLayoutCompat>

您需要从水平更改为垂直也进入您设置布局管理器的主要活动mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));

【讨论】:

以上是关于RecyclerView 只显示一项的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView 只显示一项

Android RecyclerView 绘制流程及Recycler缓存

Android RecyclerView 绘制流程及Recycler缓存

如何突出显示 Recycler View 的选定项目?

Recycler View重复,如何查看一次

如何在顶部的第一个项目装饰后剪辑 recyclerView