Повторяющиеся элементы массива в ячейках ListView вызывают Parse Server - PullRequest
0 голосов
/ 06 июля 2018

У меня есть этот фрагмент кода, который получает массивы хэштегов из базы данных сервера 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 # стиль жизни

Logcat продолжает показывать правильные массивы тегов, независимо от того, где я прокручиваю свой ListView, так что это означает, что каждый tagsArray правильно выбирается с сервера.

Как я могу исправить эту странную проблему?
Спасибо!

1 Ответ

0 голосов
/ 06 июля 2018

Вам нужно вызвать removeAllViews для вашего tagsLayout перед добавлением нового TagsRow. Проверьте ниже исправленный код:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...