Общие сведения об обходном пути в Cardview в GridView с возможностью прокрутки - PullRequest
0 голосов
/ 03 октября 2018

Я только начал работать с Android Studio и пытаюсь создать свое первое собственное приложение.Чтобы получить преимущество, я объединил некоторые учебники, которые мне понравились, и у меня возникла проблема.

В своей основной деятельности я использую CardView в прокручиваемом GridView. Поскольку у меня более 40 карт вмой CardView У меня есть множество кадров для прокрутки.

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

С обходным путем это выглядит так: Gridview работает, но имеет обходной путь

Если я удаляю мой обходной путь [delete maingrid2], это выглядит так: Gridviewпо какой-то причине .

Так что мне нужен еще один GridView, который делает что-то «связанное» с кодом.Можете ли вы объяснить мне, почему это работает или правильное исправление, чтобы оно работало нормально?

Вот мой код:

<ScrollView 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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="edmt.dev.androidgridlayout.MainActivity"
    android:fillViewport="true">


    <!--android:background="@drawable/bg"-->
    <LinearLayout
        android:orientation="vertical"
        android:fillViewport="true"
        android:weightSum="10"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 
 
 
 <GridLayout
            android:id="@+id/mainGrid"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="9.5"
            android:alignmentMode="alignMargins"
            android:columnCount="3"
            android:rowCount="2"
            android:columnOrderPreserved="false"
            android:padding="0dp"
            android:fillViewport="true"
            >

            <!--Cardviews-->
            <android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="175dp"
                android:layout_rowWeight="1"
                android:layout_columnWeight="1"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_marginBottom="5dp"
                app:cardBackgroundColor="@color/cardview_dark_background"
                app:cardElevation="5dp">


                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_margin="1dp"
                    android:orientation="vertical">


                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAlignment="center"
                        android:textColor="@android:color/black"
                        android:background="@drawable/enchantress"
                        android:textSize="18sp"
                        android:textStyle="bold" />

                </LinearLayout>

            </android.support.v7.widget.CardView>
            <android.support.v7.widget.CardView
                android:layout_width="0dp"
                android:layout_height="175dp"
                android:layout_rowWeight="1"
                android:layout_columnWeight="1"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_marginBottom="5dp"
                app:cardBackgroundColor="@color/cardview_dark_background"
                app:cardElevation="5dp">


                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal|center_vertical"
                    android:layout_margin="1dp"
                    android:orientation="vertical">


                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAlignment="center"
                        android:textColor="@android:color/black"
                        android:background="@drawable/enchantress"
                        android:textSize="18sp"
                        android:textStyle="bold" />

                </LinearLayout>

            </android.support.v7.widget.CardView>
           <!-- have around 40 more Cardviews like that -->
           

        </GridLayout>
        
        
        <GridLayout
           android:id="@+id/maingrid2>
      
        <!-- [....] -->
        <!-- exact same as above!-->

        </GridLayout>
        
    </LinearLayout>

</ScrollView>

Код явно не содержит все 40 просмотров карт.Я привел только два в примере.Это может иметь какое-то отношение к Android: weightsum, так как я играл с этим.

С наилучшими пожеланиями CG

PS Я использовал TextView для отображения изображений, потому что я думал, что я мог бы использовать текст поверхИзображение также.Сейчас я этого не делаю, поэтому я могу вернуться к ImageView.

PSS Я читал в другой ветке, что не следует использовать Gridview с Scrollview, но, возможно, в этом проблема.Но с моей точки зрения на это нет другого пути, поэтому я продолжал использовать его.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Итак, заверните эту ветку. Я хочу записать то, что я обнаружил.

В моем коде вверху я неправильно использовал "weightsum", поэтому мне пришлось сделать этот обходной путь с gridview.Очевидно, это неправильный способ сделать это.

Что касается комментариев и учебных пособий, которые я смотрел сейчас, я рекомендую использовать Recyclerview для этого вопроса.

0 голосов
/ 03 октября 2018

если у вас более одного CardView с одинаковым макетом, пожалуйста, ознакомьтесь с руководствами по RecyclerView, это сократит ваш код и увеличит скорость вашего приложения.

Все, что вам нужно сделать, это кодировать один CardView XML и вызыватьэто в вашем RecyclerView с помощью адаптера, и вы можете раздувать данные, используя ArrayList или базу данных

...