Возникли трудности с отображением динамически добавляемых строк таблицы - PullRequest
0 голосов
/ 11 июня 2018

Я работаю над экраном, который в основном показывает вопросы и ответы в виде сетки, и я динамически помещаю их все в строки таблицы.Проблема, с которой я сталкиваюсь, состоит в том, что, как только я помещаю первую строку (заголовок), остальные строки в таблице не отображаются.Я сначала добавляю заголовки.Это проявляется.

 protected void setupTableHeaders() {
    TableRow tableRow = getNewTableRow();
    tableRow.setTag(header);
    TextView textView = new TextView(this);
    GlobalVars.setupText(this,textView,32320); //Event
    textView.setTextColor(R.color.black);


    LayoutParams params = new LayoutParams(0,LayoutParams.WRAP_CONTENT,3.0f);
    params.setMarginStart(50);

    tableRow.addView(textView,params);
    tableRow.addView(getNewDivider(),(new LayoutParams(0,LayoutParams.WRAP_CONTENT,.1f)));

    Iterator it = mapQuestions.entrySet().iterator();
    //first get all the answers
    if (it.hasNext()) {
        Map.Entry pair = (Map.Entry) it.next();
        HolderQuestion holderQuestion = mapQuestions.get(pair.getKey());
        //assume all answers sets for all questions on this screen are the same.
        int i = 0;
        for (HolderAnswer answer : holderQuestion.getListAnswers()) {
            TextView textViewHeader = new TextView(this);
            textViewHeader.setTextColor(R.color.black);
            GlobalVars.setupText(this, textViewHeader, answer.getTextID());
            tableRow.addView(textViewHeader, (new LayoutParams(0, LayoutParams.WRAP_CONTENT, .5f)));
            if (i < holderQuestion.getListAnswers().size() - 1) {
                tableRow.addView(getNewDivider(), (new LayoutParams(0, LayoutParams.WRAP_CONTENT, .1f)));
            }
            i++;

        }
    }
    table1.addView(tableRow);

}

Затем я добавляю вопросы и ответы, которые не отображаются:

protected void setupRadioButtonAnswers() {


    for (int i=0;i<holderQuestionMultis.size();i++) { //assume this is populated correctly
        TableRow tableRow = getNewTableRow();
        tableRow.setTag(answerRow);
        TextView textView = new TextView(this);
        textView.setTextColor(R.color.black);
        GlobalVars.setupText(this,textView,holderQuestionMultis.get(i).getHolderQuestion().getTextID());
        textView.setTag(textCell);
        textView.setVisibility(View.VISIBLE);
        LayoutParams params = new LayoutParams(0,LayoutParams.WRAP_CONTENT,3.0f);
        params.leftMargin = 50;
        tableRow.addView(textView,params);
        tableRow.addView(getNewDivider(),(new LayoutParams(0,LayoutParams.WRAP_CONTENT,.1f)));
        for (int j=0;j<holderQuestionMultis.get(i).getRadioButtons().size();j++) {
            RadioButton radioButton = holderQuestionMultis.get(i).getRadioButtons().get(j);
            radioButton.setVisibility(View.VISIBLE);
            tableRow.addView(radioButton,(new LayoutParams(0,LayoutParams.WRAP_CONTENT,.5f)));
            if (j< holderQuestionMultis.size()-1) {
                tableRow.addView(getNewDivider(),(new LayoutParams(0,LayoutParams.WRAP_CONTENT,.1f)));
            }
        }
        tableRow.setVisibility(View.VISIBLE);
        table1.addView(tableRow);
    }

}

И два метода, которые получают radioButtons и строки таблицы:

// table elements
protected TableRow getNewTableRow() {
    TableRow tableRow = new TableRow(this);
    TableLayout.LayoutParams tlparams = new TableLayout.LayoutParams(
            TableLayout.LayoutParams.MATCH_PARENT,
            TableLayout.LayoutParams.WRAP_CONTENT);
    tableRow.setBackground(getResources().getDrawable(R.drawable.border_table_multi_grid));
    tableRow.setLayoutParams(tlparams);
    return tableRow;

}

protected RadioButton getRadioButton() {
    RadioButton radioButton = new RadioButton(this);
    radioButton.setBackground(getResources().getDrawable(R.drawable.radio_button_multigrid));
    //radioButton.setButtonDrawable(R.color.transparent);
    TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
    radioButton.setLayoutParams(params);
    return radioButton;
}

Таблица xml:

  <TableLayout
    android:id="@+id/table"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:orientation="horizontal"
    android:layout_above="@+id/viewSpacer"
    android:layout_below="@+id/lblSubQuestionText"
    android:layout_marginBottom="15dp"
    android:layout_marginRight="15dp"
    android:layout_marginLeft="15dp"
    android:layout_marginTop="15dp"

    android:background="@drawable/border_table_multi_grid">

Что мне не хватает?Первая строка заголовка таблицы закрывает другие строки?Почему они не появляются?

1 Ответ

0 голосов
/ 20 июня 2018

Оказывается, этот код:

tableRow.addView(getNewDivider(),(new LayoutParams(0,LayoutParams.WRAP_CONTENT,.1f)));

Был виновником, который заключался в добавлении LinearLayout, содержащего представление.Простое добавление представления решило проблему.

...