以编程方式创建时不会出现TextViews

时间:2019-08-08 10:37:14

标签: java android textview google-cloud-firestore tablelayout

运行我的应用程序时,没有出现以编程方式创建的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>

What the page looks like when run

What it should look like when run

Database

2 个答案:

答案 0 :(得分:0)

我认为您忘记为表行添加布局参数。 顺便说一句,您应该使用带有两个视图支架的回收者视图,其中一个视图用于发送者,第二个用于接收者。 结帐是否要改善代码 How to create RecyclerView with multiple view type? 要么 https://medium.com/@droidbyme/android-recyclerview-with-multiple-view-type-multiple-view-holder-af798458763b

答案 1 :(得分:0)

您可以使用以下方式将TextView的宽度明确设置为零:

  

public LinearLayout.LayoutParams(整数宽度,整数高度,浮动重量)

...哪里(请参阅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);

See this answer,例如