TextViews не отображаются при программном создании

Программно созданные TextView не отображаются, когда я запускаю свое приложение. Я пытаюсь загрузить сообщения и человека, отправившего их из Firebase, и отобразить их в отдельных TextView с отправителем TextView сверху. Извините за отсутствие информации, но я не знаю, что я сделал не так.

db.collection("messagesIT")
                .orderBy("Timesent", Query.Direction.DESCENDING)
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot>task) {
                        if (task.isSuccessful()) {
                            ArrayList<MessageObj> messages = new ArrayList<>();
                            for (QueryDocumentSnapshot document : task.getResult()) 
                                String message = document.getString("Message");
                                String sender = document.getString("Sender");
                                Timestamp timesent = document.getTimestamp("Timesent");
                                MessageObj mess = new MessageObj(message, sender, timesent);
                                messages.add(mess);
                                Log.d(TAG, "m: " + mess.getMessage());
                                Log.d(TAG, "s: " + mess.getSender());
                                Log.d(TAG, "t:" + mess.getTimesent());
                                showToast("b");
                            }


                            TableLayout tl = findViewById(R.id.TableLayoutSubjectGroupPage);

                            //reading and displaying messages
                            for (int i = 0; i < messages.size(); i++) {
                                TableRow trMessage = new TableRow(SubjectGroupPage.this);
                                TableRow trSender = new TableRow(SubjectGroupPage.this);
                                TextView txtSender = new TextView(SubjectGroupPage.this);
                                TextView txtMessage = new TextView(SubjectGroupPage.this);
                                Log.d(TAG, "uv8iygv iyrtgcvfi8ytgvcrcccccccccccccccccccccccccccc");

                                LinearLayout.LayoutParams Weight = new LinearLayout.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1);

                                txtSender.setText(messages.get(i).getSender());
                                txtSender.setLayoutParams(Weight);


                                txtMessage.setText(messages.get(i).getMessage());
                                txtMessage.setLayoutParams(Weight);
                                txtMessage.setTextSize(20);
                                txtMessage.setTextColor(Color.parseColor("#000000"));

                                if (messages.get(i).getSender().equals(currentUser.getUid())) {
                                    txtMessage.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END);
                                    txtSender.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END);
                                } else {
                                    txtMessage.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);
                                    txtSender.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);
                                }

                                //creating message display
                                trSender.addView(txtSender);
                                trMessage.addView(txtMessage);
                                tl.addView(trSender);
                                tl.addView(trMessage);
                            }


                        } else {
                            Log.d(TAG, "Error getting documents: ", task.getException());
                        }
                    }
                }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

                showToast("There has been an error, please try again later.");
                Log.d(TAG, "Error: " + e);

            }
        });

Макет:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/txtUsernameAdminStudentPage"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubjectGroupPage">

<ScrollView
    android:id="@+id/scrollviewMessages"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toTopOf="@+id/linearLayoutMessageInput"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent">

    <TableLayout
        android:id="@+id/TableLayoutSubjectGroupPage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        //these were tests for how I want the TextViews

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/textView02"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TextView" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/txtExample"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView"
                android:textColor="#000000"
                android:textSize="20dp" />
        </TableRow>


        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/textView5"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView"
                android:textAlignment="textEnd" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/txtExample2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView"
                android:textAlignment="textEnd"
                android:textColor="#000000"
                android:textSize="20dp"
                tools:layout_editor_absoluteY="675dp" />

        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/textView7"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView"
                android:textAlignment="textEnd" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/textView4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView"
                android:textAlignment="textEnd"
                android:textColor="#000000"
                android:textSize="20dp" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TextView" />
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/textView3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="TextView"
                android:textColor="#000000"
                android:textSize="20sp" />
        </TableRow>

    </TableLayout>


</ScrollView>

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Как выглядит страница при запуске

Как это должно выглядеть при запуске

База данных


person S.Wilko    schedule 08.08.2019    source источник
comment
Я предлагаю использовать RecyclerView. Интуитивно понятный для таких задач.   -  person Yash Krishan    schedule 08.08.2019
comment
Пожалуйста, добавьте структуру вашей базы данных в виде скриншота.   -  person Alex Mamo    schedule 08.08.2019
comment
@Alex Только что добавил   -  person S.Wilko    schedule 08.08.2019
comment
Еще одна вещь, пожалуйста, добавьте также содержимое вашего класса MessageObj.   -  person Alex Mamo    schedule 08.08.2019


Ответы (2)


Я думаю, вы забыли добавить параметры макета для строки таблицы. Кстати, вы должны использовать вид ресайклера с двумя держателями видов: один для отправителя, а второй для получателя. оформить заказ, если вы хотите улучшить свой код Как создать RecyclerView с несколькими типами просмотра ? или https://medium.com/@droidbyme/android-recyclerview-with-multiple-view-type-multiple-view-holder-af798458763b

person Salman    schedule 08.08.2019

Вы явно устанавливаете ширину ваших TextViews на ноль, используя:

общедоступные LinearLayout.LayoutParams (ширина int, высота int, вес с плавающей запятой)

...где (см. LinearLayout.LayoutParams):

int: ширина, либо ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, либо фиксированный размер в пикселях.

MATCH_PARENT имеет значение -1, а WRAP_CONTENT значение -2. Таким образом, этот код устанавливает фиксированную ширину 0:

LinearLayout.LayoutParams Weight = new LinearLayout.LayoutParams(0, TableRow.LayoutParams.WRAP_CONTENT, 1)

Вместо этого вы должны использовать:

TableLayout.LayoutParams tableParams_forRow = new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT);

а также

TableRow.LayoutParams rowParams_forTextView = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);

см. этот ответ, например

person Minding    schedule 08.08.2019