android - RecyclerView 显示随机数据

标签 android android-recyclerview recyclerview-layout

我有一个带有扩展 RecyclerView.Adapter 的自定义适配器的 RecyclerView

我在运行时使用 Textview 创建 LinearLayout 并在 RecyclerView 的每一行中膨胀它

例如,RecyclerView 的第 1 行将有 2 或 3 个在运行时创建的 Textview,第 2 行将有 2 或 3 个在运行时创建的 Textview,第 3 行将有一些 Textview...等等...

如果我检查我的日志,它的工作几乎完美......但是当我向下滚动它时,它只是将一些 textview 放在错误的地方,这意味着当我在错误的地方向下滚动时我会再次获得以前的 Textview

@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
    //Movie movie = mItems.get(i);
    hm2 = new HashMap<String, ArrayList<PD_Data>>();
    sub_rows2 = new ArrayList<PD_Data>();
    hm2=categories.get(i);
    String key=hm2.keySet().toArray()[0].toString();
    sub_rows2=hm2.get(key);

    Log.i(LOG_TKT,key);

    viewHolder.textview_category.setText(key);

    LayoutInflater inflater;
    View new_sub_row;

    for(int x=0;x<sub_rows2.size();x++){
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        new_sub_row = inflater.inflate(R.layout.recyclerview_pd, null);
        TextView heading2 = (TextView)new_sub_row.findViewById(R.id.heading2);
        heading2.setText(sub_rows2.get(x).sub_heading);
        Log.i(LOG_TKT,sub_rows2.get(x).sub_heading);
        TextView detail2 = (TextView)new_sub_row.findViewById(R.id.detail2);
        detail2.setText(sub_rows2.get(x).value);
        Log.i(LOG_TKT, sub_rows2.get(x).value);
        viewHolder.linearlayout_recyclerview_pd.addView(new_sub_row);
    }
    //viewHolder.imgThumbnail.setImageResource(movie.getThumbnail());
    hm2 = new HashMap<String, ArrayList<PD_Data>>();
    sub_rows2 = new ArrayList<PD_Data>();
}

我做错了什么?

最佳答案

从您的问题中可以明显看出您不熟悉如何使用 RecyclerView。您需要仔细阅读该主题。 Here是一个好的开始。

基本上,onBindViewHolder() 只负责将您的数据绑定(bind)到您的 viewHolder,它保存您通过 onCreateViewHolder() 提供的项目布局。这样做的原因是 RecyclerView 回收您的 View ,因此它不必在您每次滚动时都创建新 View 。

在您的情况下,您似乎需要使用一些技术来告诉 RecyclerView 对不同的项目使用不同的 viewHolder。看看你是怎么做到的here .

关于android - RecyclerView 显示随机数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33089376/

相关文章:

android - 如何同时使用新的Android 2.0 Shrinker 和Resource Shrinker?

android - Android精细音量控制

java - 滑动删除 Android recyclerview 不起作用

android - 一次包含多个项目的水平回收器 View

android - ConstraintLayout 内的 RecyclerView - 起始位置在父级顶部

android - 编译期间已经存在的程序类型

android - Firebase,发送消息到特定平台(Android)

Java:如何为每个 RecyclerView 项目制作自己的总数计数器?

java - 回收器 View 未使用 notificationDataSetChanged() 进行更新;

java - Android:传递允许 recyclerview 由特定字符串填充的变量