在可滚动的GridView中了解Cardview中的解决方法

时间:2018-10-03 04:20:39

标签: android android-studio gridview scrollview cardview

我刚开始使用Android Studio,正在尝试创建自己的第一个应用。 为了抢占先机,我整理了一些我喜欢的教程,结果遇到了问题。

在main_activity中,我在可滚动的GridView中使用 CardView。 由于我的CardView中有40多张卡,因此可以滚动浏览许多帧。

由于许多卡有时无法正确显示,因此出现了问题。我通过在使用过的Gridview(maingrid)下设置另一个Gridview(让我说maingrid2)来解决该问题,而该Gridview甚至在屏幕上都看不到。

解决方法如下: Gridview working, but has workaround

如果我删除解决方法[delete maingrid2],它看起来像这样: Gridview stretched all the way, for some reason

因此,基本上我需要另一个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个Cardview。在示例中,我只输入了两个。可能与android:weightsum有关,因为我一直在玩。

致以最诚挚的问候 CG

P.S。我使用TextView来显示图像,因为我想我可能还会在图像上使用文本。现在我没有这样做,所以我可以返回ImageView。

P.S.S。我在另一个线程中读到,不应将Gridview与Scrollview一起使用,但这也许是问题所在。但是从我的知识角度来看,没有其他方法可以使用,因此我一直使用它。

2 个答案:

答案 0 :(得分:0)

如果您有多个具有相同布局的CardView,请查看RecyclerView上的教程,这将减少代码并提高应用速度。

您要做的就是编写一个CardView XML并使用适配器在RecyclerView中调用它,然后可以使用ArrayList或A数据库来填充数据

答案 1 :(得分:0)

因此,此线程结束了,我想写下我发现的内容。

在顶部的代码中,我错误地使用了“ weightsum”,因此必须对gridview执行此变通方法。显然这不是正确的方法。

关于我现在已经看过的评论和教程,我建议为此使用Recyclerview。