Невозможно обновить TableLayout из фрагмента - PullRequest
0 голосов
/ 12 апреля 2020

Я работаю над приложением, которое позволяет пользователю пройти тест и записать все результаты тестов, на которые можно будет ссылаться позже, если это необходимо. Я строю фрагмент, который позволяет пользователю просматривать эту запись в TableLayout. Мне нужно динамически добавлять строки, поэтому я пытаюсь создать способ добавления строк во время метода onCreateView фрагмента. Однако эти строки никогда не отображаются в приложении, несмотря на то, что они отображаются как дочерние элементы таблицы в отладчике. Я пытался отсоединить, а затем снова прикрепить фрагмент, но это никогда не помогает. Я был бы очень признателен за возможность выяснить это.

Это фрагмент:

public class GalleryFragment extends Fragment {

    private GalleryViewModel galleryViewModel;

    public void addEntryToTable(TableLayout table, String user, String date, String score) {

        QuizHistoryTableRow row = new QuizHistoryTableRow(getContext(), user, date, score);
        table.addView(row);
    }

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_gallery, container, false);

        TableLayout table = root.findViewById(R.id.quiz_history_table);
        addEntryToTable(table, "user", "date", "score");

        return root;
    }
}

А вот строка пользовательской таблицы:

public class QuizHistoryTableRow extends TableRow {

    public QuizHistoryTableRow(Context context, String user, String date, String score){
        super(context);

        TextView userView = new TextView(context);
        userView.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
        userView.setText(user);
        userView.setTextColor(0);
        userView.setTextSize(22);

        TextView dateView = new TextView(context);
        dateView.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
        dateView.setText(date);
        dateView.setTextColor(0);
        dateView.setTextSize(22);

        TextView scoreView = new TextView(context);
        scoreView.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
        scoreView.setText(score);
        scoreView.setTextColor(0);
        scoreView.setTextSize(22);

        addView(userView);
        addView(dateView);
        addView(scoreView);
    }

}

1 Ответ

1 голос
/ 12 апреля 2020

Исправлено, это была проблема с TableLayout.LayoutParams против TableRow.LayoutParams. Спасибо Майку М. за ответ.

Модифицированный фрагмент:

public class GalleryFragment extends Fragment {

    private GalleryViewModel galleryViewModel;

    public TableRow getNewEntry(Context context, String user, String date, String score) {

        QuizHistoryTableRow row = new QuizHistoryTableRow(context, user, date, score);
        row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
        return row;
    }

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_gallery, container, false);

        TableLayout table = root.findViewById(R.id.quiz_history_table);
        TableRow row = getNewEntry(getContext(), "user", "date", "score");
        table.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
        return root;
    }

}

И модифицированный ряд таблицы:

public class QuizHistoryTableRow extends TableRow {

    public QuizHistoryTableRow(Context context, String user, String date, String score){
        super(context);

        TextView userView = new TextView(context);
        userView.setText(user);
        userView.setTextColor(Color.BLACK);
        userView.setTextSize(22);
        userView.setLayoutParams(new LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));

        TextView dateView = new TextView(context);
        dateView.setText(date);
        dateView.setTextColor(Color.BLACK);
        dateView.setTextSize(22);
        dateView.setLayoutParams(new LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));

        TextView scoreView = new TextView(context);
        scoreView.setText(score);
        scoreView.setTextColor(Color.BLACK);
        scoreView.setTextSize(22);
        scoreView.setLayoutParams(new LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));

        addView(userView);
        addView(dateView);
        addView(scoreView);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...