我对Android开发很新。我设法将数据保存到SQLite数据库。现在,我想要的是在调用viewData()时查看这些数据。我有viewData(),它将数据显示为Toast,因为我将其作为样本。现在我需要使用ListView在新活动上显示这些数据,但要显示的数据数量取决于此时数据库中有多少数据,如果用户保存了10个项目,那么我希望显示所有10个项目起来。我该怎么办?
我希望我的问题很明确。
提前致谢。
答案 0 :(得分:0)
你可以使用ListView 在你的布局中声明它
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</ListView>
</LinearLayout>
在yor活动中声明了一个globar var:
ListView listView;
和onCreate
listView = (ListView) findViewById(R.id.list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
// Assign adapter to ListView
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id){
// ListView Clicked item index
int itemPosition = position;
// ListView Clicked item value
String itemValue = (String) listView.getItemAtPosition(position);
}
});
datos可以是一个数组,您可以使用从数据库中提取的数据填充这些数据,这是显示数据的最简单方法。如果要自定义listView,可以创建自定义适配器,或者以其他方式替换listView的最新元素是ReciclerView。我希望能帮助你
答案 1 :(得分:0)
您可以使用SimpleCursorAdapter:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView answerList=(ListView)findViewById(R.id.answerList);
Cursor mCursor = getData();
startManagingCursor(mCursor);
// now create a new list adapter bound to the cursor.
// SimpleListAdapter is designed for binding to a Cursor.
ListAdapter adapter = new SimpleCursorAdapter(this, // Context.
android.R.layout.two_line_list_item,
mCursor, // Pass in the cursor to bind to.
// Array of cursor columns to bind to.
new String[] {"_id", "answer"};
// Parallel array of which template objects to bind to those
// columns.
new int[] { android.R.id.text1,android.R.id.text2 });
// Bind to our new adapter.
answerList.setAdapter(adapter);
}
private Cursor getData() {
String sq = "Select _id, answer from foo";
Cursor c = db.rawQuery(sql);
return c;
}
答案 2 :(得分:0)
我会尽力给出一个深入的答案。
每当您想要从数据库中获取并显示数据列表时,您都可以使用ListView
,GridView
,Spinner
等。
您可以使用CursorAdapter
,这样可以更轻松,更轻松地查询和显示数据。
以下是它的基本视觉表示,
第1步
首先,您需要创建一个数据库。正如您的问题中所提到的,很明显您知道如何创建数据库并将一些数据放入其中。所以我没有深入探讨它。
第2步
我们需要定义用于ListView
中各个项目的布局,并将其另存为res/layout/item_todo.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="horizontal" >
<TextView
android:id="@+id/tvBody"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Study cursors"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/tvPriority"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="3"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
第3步
现在我们需要定义一个适配器。在这里,我们使用CursorAdapter
将Cursor
(您提供的)转换为视图(由您的布局定义)。
我们需要覆盖两种方法newView
和bindView
。 newView负责首次膨胀newViews,bindView负责将数据绑定到Views。
public class TodoCursorAdapter extends CursorAdapter {
public TodoCursorAdapter(Context context, Cursor cursor) {
super(context, cursor, 0);
}
// The newView method is used to inflate a new view and return it,
// you don't bind any data to the view at this point.
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.item_todo, parent, false);
}
// The bindView method is used to bind all data to a given view
// such as setting the text on a TextView.
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Find fields to populate in inflated template
TextView tvBody = (TextView) view.findViewById(R.id.tvBody);
TextView tvPriority = (TextView) view.findViewById(R.id.tvPriority);
// Extract properties from cursor
String body = cursor.getString(cursor.getColumnIndexOrThrow("body"));
int priority = cursor.getInt(cursor.getColumnIndexOrThrow("priority"));
// Populate fields with extracted properties
tvBody.setText(body);
tvPriority.setText(String.valueOf(priority));
}
}
第4步
现在您可以清楚地看到,构造函数需要Context
和Cursor
。现在我们需要查询数据库并将数据检索到Cursor并将其传递给适配器。
// TodoDatabaseHandler is a SQLiteOpenHelper class connecting to SQLite
TodoDatabaseHandler handler = new TodoDatabaseHandler(this);
// Get access to the underlying writeable database
SQLiteDatabase db = handler.getWritableDatabase();
// Query for items from the database and get a cursor back
Cursor todoCursor = db.rawQuery("SELECT * FROM todo_items", null);
第5步
这是我们需要实例化适配器并将ListView
与适配器连接以填充数据的最后一步。
// Find ListView to populate
ListView lvItems = (ListView) findViewById(R.id.lvItems);
// Setup cursor adapter using cursor from last step
TodoCursorAdapter todoAdapter = new TodoCursorAdapter(this, todoCursor);
// Attach cursor adapter to the ListView
lvItems.setAdapter(todoAdapter);