Android 2.3.3
我在数据库中有一个包含两列的表。我希望检索这些数据并在具有两个文本视图的ListView中显示它们(第一个textview中的第一列和第二个textview中的第二列),并对数据库中的所有行重复此操作。我已经阅读了一些关于(自定义适配器和列表视图)的例子,但是我读的越多,我就越感到困惑。
有人能给我一个如何做到这一点的先声夺人吗?我可以使用动态列表视图,但我希望使用静态列表视图。
以下是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>
我正在从数据库中检索数据并将其存储在Cursor中。我想从Cursor读取数据并将这些值提供给listview中的textviews。
答案 0 :(得分:1)
你应该遵循这个流程
步骤1 - &gt;从数据库中获取数据并使用getter Setter填充List
步骤2 - &gt;创建BaseAdapter类并在此类中提供该列表[这里您需要查看BaseAdpter绑定方法]
Stap 3 - &gt;使用ListView绑定BaseAdapter对象
答案 1 :(得分:1)
我在数据库中有一个包含两列的表。我希望找回这个 数据并在具有两个文本视图的ListView中显示它们(第一列中的 第一个textview和第二个textview中的第二列)并重复此操作 直到数据库中的所有行。我看了几个例子 on(自定义适配器和listview)怎么做,但是我读的越多, 更多我感到困惑。
您好。这个算法并不太棘手。您需要执行以下步骤:
List<TableDataType>
或直接Cursor
。ListAdapter
的子类以更好地控制它。ListAdapter
设为ListView
。从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
扩展适配器,并在TextView
方法中将数据设置为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;
}
}
最后将Adapter设置为ListView
并完成工作。
DataType
是自己定义的对象。它在您的数据库中显示表,其中Object的属性与表中的列相同。
还有其他方法并从db Cursor返回并使用SimpleCursorAdapter
或CursorAdapter
。以下是很好的例子:
答案 2 :(得分:1)
您所能做的只是看看Bind the List view from Database with Cursor Adapter。 另请查看ListView Example using Cursor Adapter with SQLiteDatabase。
我希望这能指导你。
感谢。