0

安卓 2.3.3

我在数据库中有一个包含两列的表。我希望检索这些数据并将它们显示在具有两个文本视图的 ListView 中(第一个文本视图中的第一列和第二个文本视图中的第二列)并重复此操作,直到数据库中的所有行。我已经阅读了一些关于(自定义适配器和列表视图)如何做的示例,但是我阅读的越多,我就越感到困惑。

有人可以让我先了解如何做到这一点吗?我可以使用动态列表视图,但我希望使用静态列表视图。

这是列表视图中行的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingBottom="5dp"
    android:paddingTop="5dp" >

    <TextView
        android:id="@+id/txtView_History_Expression"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.50"
        android:text="Expression"
        android:textColor="#FFFFFF"
         />

    <TextView
        android:id="@+id/txtView_History_Result"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="0.50"
        android:text="Result"
        android:textColor="#316DA2" />

</LinearLayout>

这是带有 ListView 的 XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <TextView 
        android:id="@+id/txtView_History_Header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:text="HISTORY"
        android:gravity="center"
        android:textSize="24dp"
        android:textColor="#316DA2"
        android:paddingTop="10dp"
        />

    <ListView
        android:id="@+id/lvHistory"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

我正在从数据库中检索数据并将其存储在光标中。我想从光标读取数据并将这些值提供给列表视图中的文本视图。

4

3 回答 3

1

你应该遵循这个流程

第 1 步 -> 从数据库中获取数据并使用 getter Setter 填充列表

步骤 2 -> 创建 BaseAdapter 类并在该类中给出该列表[这里您需要查看 BaseAdpter 绑定方法]

步骤 3 -> 将 BaseAdapter 对象与您的 ListView 绑定

于 2013-03-16T07:47:04.277 回答
1

我在数据库中有一个包含两列的表。我希望检索这些数据并将它们显示在具有两个文本视图的 ListView 中(第一个文本视图中的第一列和第二个文本视图中的第二列)并重复此操作,直到数据库中的所有行。我已经阅读了一些关于(自定义适配器和列表视图)如何做的示例,但是我阅读的越多,我就越感到困惑。

你好。这个算法不是太棘手。您需要执行以下步骤:

  1. 创建一些从 db 获取行的方法。您可以退货 List<TableDataType>或直接退货Cursor
  2. 创建一些子类ListAdapter以更好地控制它。
  3. 设置ListAdapterListView

例子:

从db获取数据的方法:

public List<DataType> getAll() {
   List<DataType> objects = new ArrayList<DataType>();
   DataType child = null;
   Cursor c = null;    
   try {
      String query = "select * from TableName";
      c = db.rawQuery(query, null);
      if (c.moveToFirst()) {
         child = new DataType();
         child.setId(c.getInt(c.getColumnIndex("id")));
         child.setName(c.getString(c.getColumnIndex("name")));
         objects.add(child);  
      }
      return objects;
   }
   finally {
      if (c != null) {
         c.close();
      }
      if (db != null) {
         db.close();
      }
   }
}

然后,您可以创建自己的适配器,从方法扩展BaseAdapter并将数据设置为TextViews,getView()并创建RowHolder任意对象,其中包含每行的子项(小部件)

public View getView(int position, View convertView, ViewGroup parent) {
   if (convertView == null) {
      // inflate convertView and add row to RowHolder
      // set RowHolder as tag of row .. convertView.setTag(rowHolder);
   }
   else {
      // just recycle views so get existing RowHolder
      rowHolder = (RowHolder) convertView.getTag();
   }
   // set data to widget(s)
   rowHolder.getFirstTextView().setText(dataSource.get(position).getId());
   ...

}

RowHolder可以看起来像

public class RowHolder {

   private View row;
   private TextView idColumn;

   public RowHolder(View v) {
      this.row = v;
   }

   public TextView getIdColumn() {
      if (idColumn == null) {
         idColumn = (TextView) row.findViewById(R.id.idColumnId);
      }
      return idColumn;


   }
}

最后将适配器设置为ListView并完成工作。

笔记:

DataType是自己定义的对象。它在您的数据库中显示表,其中对象的属性与表中的列相同。

还有其他方法和来自 db Cursor 的返回以及SimpleCursorAdapteror的用法CursorAdapter。这里有很好的例子:

于 2013-03-16T08:07:42.490 回答
1

您所能做的就是看一下Bind the List view from Database with Cursor Adapter。还要检查ListView Example using Cursor Adapter with SQLiteDatabase

我希望这会指导你。

谢谢。

于 2013-03-16T08:17:29.830 回答