【问题标题】:LIstView shows no data while populating through cursorLIstView 在通过光标填充时不显示数据
【发布时间】:2017-12-11 00:15:09
【问题描述】:

我是 Android 开发的新手。我正在使用 ListView 列出 SQLite 数据库中的一些数据。 我的 Main.xml 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/inspections"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
            <!-- Header -->
    <LinearLayout android:id="@+id/header"
        android:background="#ff347c12"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        >
        <TextView android:id="@+id/item1"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:width="100dip"
            android:height="30dip"
            android:text="Id"
        />
        <TextView android:id="@+id/item2"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:text="Customer"
            android:width="100dip"
            android:height="30dip"
        />
        <TextView android:id="@+id/item3"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:text="Contract"
            android:width="100dip"
            android:height="30dip"
        />
        <TextView android:id="@+id/item4"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:text="Inspector"
            android:width="100dip"
            android:height="30dip"
        />
    </LinearLayout>

    <!-- List Divider -->
    <View android:layout_width="fill_parent"
        android:layout_height="1dip"
        android:background="?android:attr/listDivider" />

    <!-- ListView (grid_items) -->
    <LinearLayout android:id="@+id/layout"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent">
        <ListView android:id="@+id/listview"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent">
        </ListView>
    </LinearLayout>
</LinearLayout>

我使用的是grid_item.xml,用来保存每一行的数据,它看起来像:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <TextView android:id="@+id/item1"
            android:text="row_id"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:width="20dip"
        />
        <TextView android:id="@+id/item2"
            android:text="col_1"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:width="100dip"
        />
        <TextView android:id="@+id/item3"
            android:text="col_2"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:width="100dip"
        />
        <TextView android:id="@+id/item4"
            android:text="col_3"
            android:layout_height="fill_parent"
            android:layout_width="wrap_content"
            android:width="100dip"
        /> </LinearLayout>

代码:

public class Inspections extends Activity{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        try
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.inspections);

            LoadInspections();
        }
        catch (Exception e) {
            CommonMethods.ShowMessageBox(this, e.toString());
        }
    }

    private void LoadInspections()
    {
        try
        {
            DBAdapter db = new DBAdapter(this);
            db.open();
            Cursor cur = db.GetInspections();
            if(cur.moveToFirst())
            {
                startManagingCursor(cur);
                ListView lv = (ListView)findViewById(R.id.listview);
                // create the grid item mapping
                String[] from = new String[] {"_id", "customer", "contract", "inspector"};
                int[] to = new int[] {R.id.item1, R.id.item2, R.id.item3, R.id.item4 };

                // fill in the grid_item layout
                SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.grid_item, cur, from, to);

                lv.setAdapter(adapter);  
                Log.d("Inspection", "Records found " + cur.getString(1) + "/ "+ cur.getString(2)+ "/ "+ cur.getString(3));
            }
            else
            {
                Log.d("Inspection", "No reords");
            }

            db.close();
        }
        catch(Exception ex)
        {
            Log.d("Inspection", "Error: "+ ex.toString());
        }
     }
}

问题: LoadInspections() 有问题,列表视图不显示数据,只显示 HEADER-ROW。光标正在检索数据,检查这一行:

Log.d("Inspection", "Records found " + cur.getString(1) + "/ "+ cur.getString(2)+ "/ "+ cur.getString(3));

日志窗口正在显示数据。

我尽力在stackoverflow上找到答案,但没有成功。 提前感谢您的宝贵时间和帮助。

【问题讨论】:

    标签: android sqlite listview cursor


    【解决方案1】:

    我正在尝试不同的事情&当我从我的 main.xml 中删除“标题”和“列表分隔符”部分时,它起作用了。很奇怪??

    所以我的 main.xml 现在看起来像:

    <?xml version="1.0" encoding="utf-8"?>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/inspections"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
        <!-- ListView (grid_items) -->
        <LinearLayout android:id="@+id/layout"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent">
            <ListView android:id="@+id/mylistview"
                android:layout_height="fill_parent"
                android:layout_width="fill_parent">
            </ListView>
        </LinearLayout>
    </LinearLayout>
    

    有人可以评论 listview 的这种奇怪行为吗?

    【讨论】:

      【解决方案2】:

      您可能已经发现,主要的 LinearLayout 具有水平方向。您将添加的每个子视图都将水平添加到它旁边。由于您的第一个视图“@+id/header”占据了屏幕的整个宽度,因此其他视图将被添加到屏幕之外。

      如果您将“@+id/inspections”的方向更改为“垂直”,您的所有视图都将可见。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多