ListView 单元格中的重复数组元素发出 Parse Server

Posted

技术标签:

【中文标题】ListView 单元格中的重复数组元素发出 Parse Server【英文标题】:Repeating array elements in ListView cells issue Parse Server 【发布时间】:2018-12-15 01:47:48 【问题描述】:

我有这段代码可以根据每个帖子从 Parse 服务器数据库中获取主题标签数组:

// Tags
List<String> tagsArray = new ArrayList<>();
if (pObj.getList(Configurations.POSTS_TAGS) != null) 
  tagsArray = pObj.getList(Configurations.POSTS_TAGS);
  Log.i(Configurations.TAG, "TAGS: " + tagsArray);


for (int i=0; i<tagsArray.size(); i++) 
    LinearLayout tagsLayout = finalCell.findViewById(R.id.cpTagsLayout);
    tagsLayout.setOrientation(LinearLayout.HORIZONTAL);
    // Create Buttons
    final Button tButt = new Button(ctx);
    int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 44, getResources().getDisplayMetrics());
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, height);
    lp.setMargins(3, 0, 3, 0);
    tButt.setLayoutParams(lp);

    tButt.setText(tagsArray.get(i));
    tButt.setTypeface(Configurations.osItalic);                                        tButt.setTextColor(Color.parseColor("#777777"));                                        tButt.setBackgroundColor(Color.parseColor("#00000000"));
    tButt.setTextSize(10);
    tButt.setAllCaps(false);
    tButt.setOnClickListener(new View.OnClickListener() 
       @Override
       public void onClick(View v) 
           String tag = tButt.getText().toString();
           Log.i(Configurations.TAG, "SELECTED TAG: " + tag);
        );

    // Add button to the layout
    tagsLayout.addView(tButt);
       // ./For loop
    // ./ If

应用程序在向下滚动 ListView 时正确获取标签数组,我通过检查 Logcat 知道:

I/log-: TAGS: [#quoteoftheday, #fun, #life]
I/log-: TAGS: [#breakfastinlove, #lifestyle, #pikkypic]
I/log-: TAGS: [#bigapple, #lifestyle]

无论如何,从第 3 个单元格开始,即使我再次向上滚动 ListView,我也会在每个单元格的 Scrollview 中获得额外的按钮,它们是之前数组的总和,例如,第 3 个单元格显示连续按以下按钮:#quoteoftheday #fun #life #breakfastinlove、#lifestyle、#pikkypic、#bigapple、#lifestyle

虽然它应该只显示:#bigapple #lifestyle

无论我在哪里滚动 ListView,Logcat 都会一直显示正确的标签数组,因此这意味着每个 tagsArray 都已从服务器正确获取。

如何解决这个奇怪的问题? 谢谢!

【问题讨论】:

你是否关闭了 for before tagsLayout.addView(tButt); ? no @JoaquinAlvarez,For 循环右括号在 tagsLayout.addView() 之后,您可以在代码中看到。 【参考方案1】:

在添加新的 TagsRow 之前,您需要为您的 tagsLayout 调用 removeAllViews。 检查以下更正的代码:

List<String> tagsArray = new ArrayList<>();
if (pObj.getList(Configurations.POSTS_TAGS) != null) 
  tagsArray = pObj.getList(Configurations.POSTS_TAGS);
  Log.i(Configurations.TAG, "TAGS: " + tagsArray);

LinearLayout tagsLayout = finalCell.findViewById(R.id.cpTagsLayout);
tagsLayout.setOrientation(LinearLayout.HORIZONTAL);
tagsLayout.removeAllViews();

for (int i=0; i<tagsArray.size(); i++) 
    // Create Buttons
    final Button tButt = new Button(ctx);
    int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 44, getResources().getDisplayMetrics());
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, height);
    lp.setMargins(3, 0, 3, 0);
    tButt.setLayoutParams(lp);

    tButt.setText(tagsArray.get(i));
    tButt.setTypeface(Configurations.osItalic);                                        tButt.setTextColor(Color.parseColor("#777777"));                                        tButt.setBackgroundColor(Color.parseColor("#00000000"));
    tButt.setTextSize(10);
    tButt.setAllCaps(false);
    tButt.setOnClickListener(new View.OnClickListener() 
       @Override
       public void onClick(View v) 
           String tag = tButt.getText().toString();
           Log.i(Configurations.TAG, "SELECTED TAG: " + tag);
        );

    // Add button to the layout
    tagsLayout.addView(tButt);
       // ./For loop
    // ./ If

【讨论】:

你是对的,虽然我不得不稍微编辑你的代码,但你必须初始化 LinearLayout tagsLayout = finalCell.findViewById(R.id.cpTagsLayout);在 FOR 循环之前 ;) 非常感谢您的帮助! 最欢迎 :)

以上是关于ListView 单元格中的重复数组元素发出 Parse Server的主要内容,如果未能解决你的问题,请参考以下文章

如何快速检索不同单元格中的数组元素 ios

重用 tableview 单元格中的元素

将 Pandas 单元格中的列表拆分为多列 [重复]

iOS Swift:在自定义 UITableView 单元格中更新二维数组时获取重复值

如何访问数组并将其存储在python中的单个数组中(类似于matlab中的单元格)

在 Matlab 中访问单元格中的向量