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

问题描述 投票:0回答:1

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

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

android arrays database listview
1个回答
1
投票

在添加新标签行之前,您需要为标签布局调用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
© www.soinside.com 2019 - 2024. All rights reserved.