我无法弄清楚我的Android GridView出了什么问题。我正在从SQLite数据库中提取数据,并将光标返回到适配器,但它在渲染时肯定没有正确排列。这就是我所拥有的。
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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" android:fitsSystemWindows="true"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
content_main.xml
<RelativeLayout 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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<LinearLayout
android:id="@+id/top_linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:src="@drawable/icon2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="bottom"
android:padding="8dp"
android:text="@string/app_name"
android:textColor="@color/app_name"
android:textSize="38sp"
android:textStyle="bold" />
</LinearLayout>
<include layout="@layout/top_right_info_board" />
</LinearLayout>
<GridView
android:id="@+id/row_of_stats"
android:layout_width="match_parent"
android:layout_height="match_parent">
</GridView>
</RelativeLayout>
data_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/id_textview"
android:background="@color/RED"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/data01_textview"
android:background="@color/DARKVIOLET"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/data02_textview"
android:background="@color/YELLOWGREEN"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/data03_textview"
android:background="@color/LIGHTPINK"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/data04_textview"
android:background="@color/MIDNIGHTBLUE"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/data05_textview"
android:background="@color/PALEVIOLETRED"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/data06_textview"
android:background="@color/AQUA"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/data07_textview"
android:background="@color/YELLOWGREEN"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/data08_textview"
android:background="@color/BLUEVIOLET"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
</LinearLayout>
MainActivity.java
dataCursor = myDBHelper.getDataCursor();
String[] fromColumns = {"_id","data01","data02","data03","data04","data05","data06","data07","data08"};
int[] toViews = {R.id.id_textview, R.id.data01_textview, R.id.data02_textview, R.id.data03_textview, R.id.data04_textview, R.id.data05_textview, R.id.data06_textview, R.id.data07_textview, R.id.data08_textview};
SimpleCursorAdapter mySimpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.data_row, dataCursor, fromColumns, toViews, 0);
GridView myGridView = (GridView) findViewById(R.id.row_of_stats);
myGridView.setAdapter(mySimpleCursorAdapter);
这就是它的样子:
我尝试使用android:numColumns="9"
,但这就是之后发生的事情:
我希望它看起来像这样:
我使用ScrollView和TableLayout完成了这个最终的,有吸引力的布局,但它确实非常糟糕且非常缓慢,所以我更愿意坚持使用GridView适配器。
答案 0 :(得分:1)
这是一个数据表;你不想要GridView
。
GridView
。如果你有一堆缩略图,那么无论是有两列还是四列,网格都会有意义。
在您的情况下,每列代表与其旁边的列不同的内容,因此GridView
在这里没有意义。
您只需将GridView
更改为ListView
即可。您的数据行布局已经处于水平方向,您有CursorAdapter
做正确的事情。只需将GridView
更改为ListView
即可让您朝着正确的方向前进。
然后你会想要开始玩行布局。一个好的开始是给你的TextView
“单元格”赋予所有相同的权重以及minWidth
值。
您将遇到的最后一个问题是,当表格比设备屏幕宽时,即使您将行压缩到最小的可读宽度,该怎么办。一个超级简单的解决方案是使用左/右按钮。当用户按下按钮向右移动时,您将适配器设置为将visibility="gone"
放在布局中的第一个TextView
上,这会使表跳转到左侧。如果用户再次按下右键,则会将第一个两个 TextView
设置为visibility="gone"
。你明白了。
我正在开发一个数据表的项目,其中每个列表项视图都是HorizontalScrollView
,其中包含一个水平LinearLayout
和TextView
个单元格,就像您拥有的那样。诀窍是我捕获了一行的水平滚动事件,然后将它们传播到所有行,因此行将同步地水平滚动,从而产生双向滚动的效果。当然,由于每行的回收,(垂直)滚动性能非常好。如果您对此感兴趣,请告诉我。