在ListView单元格中重复数组元素会发出解析服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ListView单元格中重复数组元素会发出解析服务器相关的知识,希望对你有一定的参考价值。

我有这段代码,它根据每个帖子从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都可以从服务器中正确获取。

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

答案

在添加新标签行之前,您需要为标签布局调用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

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

在 HTML 单元格中使用 HTML 解析 Python 正则表达式 [重复]

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

如何将数组元素放在表格视图单元格上

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

在可重复使用的单元格中显示下载进度

确定在 Swift 的自定义 listView 单元格中按下了哪个按钮