Нежелательные строки в макете таблицы

В моем классе адаптера я хочу создать макет таблицы только с 4 строками, чтобы представить мои 4 значения в разных 4 строках.

Все хорошо, за исключением того, что количество строк утроено (12 строк), но я разработал его так, чтобы было только 4 строки, как в коде ниже:

public View getView(final int position, View view, ViewGroup parent) {
    final arraybill.ViewHolder holder;

    if (view == null) {
        holder = new arraybill.ViewHolder();
        view = inflater.inflate(R.layout.layout_bill, null);
        // Locate the TextViews in listview_item.xml
        holder.ll = (TableLayout) view.findViewById(R.id.displayLinear);

        view.setTag(holder);
    } else {
        holder = (arraybill.ViewHolder) view.getTag();
    }
    // Set the results into TextViews



    label = new String[] {"A","B","C","D"};
    value = new String[]{modelList.get(0).getbill(),modelList.get(0).getaccepting(),
            modelList.get(0).getdeclining(),modelList.get(0).getwaiting()};



    for (int i = 0; i < label.length; i++) {

        TableRow row= new TableRow(mContext);
        row.setGravity(Gravity.CENTER);
        TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
        row.setLayoutParams(lp);

        tv = new TextView(mContext);
        tv.setPadding(20,10,5,10);
        tv.setTextColor(Color.parseColor("#000000"));
        tv.setText(label[i]);

        tv2 =new TextView(mContext);
        tv2.setText("");
        tv2.setPadding(10,10,10,10);
        tv2.setTextColor(Color.parseColor("#000000"));

        tv3 =new TextView(mContext);
        tv3.setText(value[i]);
        tv3.setPadding(5,10,20,10);
        tv3.setTextColor(Color.parseColor("#000000"));

        row.addView(tv3,0);
        row.addView(tv2,1);
        row.addView(tv,2);

        row.setBackgroundResource(R.drawable.border);
        holder.ll.setColumnShrinkable(0,true);
        holder.ll.addView(row,i);
   }

    //...

    return view;
}

Вы видите 12 строк, когда ожидаете три. Каково содержание этих 12 строк? Дублируются ли строки, и если да, то как. Размещенное изображение поможет.

Cheticamp 08.04.2019 17:16

Да, они ожидаемые четыре ряда и утроены

Ahmad Sayed Abdulrahman 08.04.2019 17:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не эксперт или что-то в этом роде, поэтому моя «помощь» может быть совершенно неправильной, но я пытаюсь: label.length равно 4, поэтому вы создаете 4X3 tv, tv2, tv3 и добавляете их. Вот почему у вас 12 строк, а не 4, я думаю.

tv, tv2, tv3 - это текстовые изображения в одной строке

Ahmad Sayed Abdulrahman 08.04.2019 16:57
Ответ принят как подходящий

Попробуйте поставить holder.ll.removeAllViews(); перед циклом for:

label = new String[] {"A","B","C","D"};
value = new String[]{modelList.get(0).getbill(),modelList.get(0).getaccepting(),
        modelList.get(0).getdeclining(),modelList.get(0).getwaiting()};

holder.ll.removeAllViews();

for (int i = 0; i < label.length; i++) {

    TableRow row= new TableRow(mContext);
    row.setGravity(Gravity.CENTER);
    TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
    row.setLayoutParams(lp);

    //...

}

держатель.ll = (TableLayout) view.findViewById(R.id.displayLinear); и я использую базовый адаптер

Ahmad Sayed Abdulrahman 08.04.2019 17:07

каким методом вы выполняете этот код с циклом for?

Oleg Golomoz 08.04.2019 17:15

public View getView (конечная позиция int, представление View, родитель ViewGroup)

Ahmad Sayed Abdulrahman 08.04.2019 17:22

Я обновил свой ответ. Не могли бы вы предоставить полный код вашего адаптера?

Oleg Golomoz 08.04.2019 17:26

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

Oleg Golomoz 08.04.2019 19:10

Другие вопросы по теме