CardView не надувается должным образом, используя LayoutInflater - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу добавить CardView программно.

Вот мой основной макет XML активности (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/linearLayout1"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:orientation="vertical">
</LinearLayout>

Вот мой шаблон CardViewTemplate (card_view_template.xml)

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/cardViewTemplate"
    android:layout_width="160dp"
    android:layout_height="190dp"
    android:layout_margin="10dp"
    android:clickable="true"
    android:foreground="?android:selectableItemBackground">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="This is a Card" />

</androidx.cardview.widget.CardView>

Вот мой код Java (MainActivity.java)

LayoutInflater inflater = getLayoutInflater();
ViewGroup parent = findViewById(R.id.linearLayout1);
inflater.inflate(R.layout.card_view_template, parent);

See Output

Все отлично работаетдо здесь.

Теперь я хочу добавить Карту в определенную позицию в моем activity_main.xml , так как я использую несколько CardView, я хочу добавить Карты в определенную позицию. Следовательно, вместо приведенного выше кода, я попробовал это:

LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.card_view_template, null);
ViewGroup parent = findViewById(R.id.linearLayout1);
parent.addView(view, 0);

Но он не раздувается должным образом. Виден только текст, карта не появляется. See Output Here

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

При динамическом добавлении представлений мы не должны раздувать View с нулевым ViewGroup родителем.

В этом View view = inflater.inflate(R.layout.card_view_template, null); здесь родитель указан как ноль, это вызвало проблему.

Укажите родителя, к которому будет присоединен View, и установите присоединение к родителю только как false. Таким образом, Parent будет указан, но не присоединен.

Следовательно, сначала объявите parent (root), а затем создайте View, укажите родителя (root) и установите присоединение к parent (root) false

Это правильное утверждение View view = inflater.inflate(R.layout.card_view_template, parent, false);

Следовательно, полный код будет:

LayoutInflater inflater = getLayoutInflater();
ViewGroup parent = findViewById(R.id.linearLayout1);
View view = inflater.inflate(R.layout.card_view_template, parent, false);
parent.addView(view, 0);
0 голосов
/ 06 ноября 2019

Я предлагаю использовать прямую линейную схему, например:

LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.card_view_template, null);
LinearLayout LL = findViewById(R.id.linearLayout1);
LL.addView(view,0);
...