我想让数据库的条目显示在Activity中的Rows中。我创建了一个Row Class来设置每一行的布局。
当我运行此代码时,我的而循环似乎不起作用 - 它只显示我的数据库的第一个条目。我确定我只是缺少一行代码来创建下一行。有人可以看看它,也许看看我哪里出错了?
public class ReviewActivity extends ActionBarActivity {
myname.project20.DatabaseHelper1 Db_Today;
LinearLayout reviewcontainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_review);
Db_Today = new DatabaseHelper1(this);
reviewcontainer = (LinearLayout)findViewById(R.id.reviewcontainer);
LayoutInflater layoutInflater =
(LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View addView = layoutInflater.inflate(R.layout.db1row, null);
TextView textViewRowReview = (TextView)addView.findViewById(R.id.textViewRowReview);
Cursor res = Db_Today.getAllData();
while (res.moveToNext()) {
textViewRowReview.setText(
"Name: " + res.getString(1) + "\n" + "Age: " +
res.getString(2) + "\n" + "Gender: " + res.getString(3) + "\n\n");
}
Button buttonRemove = (Button)addView.findViewById(R.id.button_x);
buttonRemove.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
((LinearLayout) addView.getParent()).removeView(addView);
}});
reviewcontainer.addView(addView);
}
db1.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button_x"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="x"/>
<TextView
android:id="@+id/textViewRowReview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/button_x"/>
ReviewActivity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView android:text="Review and Modify Today's Data Here"
android:id="@+id/TextViewReview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:id="@+id/reviewcontainer"
android:layout_width="match_parent"
android:layout_height="250dp"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
我认为这是DatabaseHelper1.java唯一重要的摘录
public Cursor getAllData(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from " + TABLE_NAME, null);
return res;
}
如果您需要任何进一步的信息,请告诉我!非常感谢你的帮助&lt; 3
答案 0 :(得分:0)
我看到了你的错误。在本节中:
TextView textViewRowReview = (TextView)addView.findViewById(R.id.textViewRowReview);
Cursor res = Db_Today.getAllData();
while (res.moveToNext()) {
textViewRowReview.setText(
textViewRowReview
只是一个TextView
,它将继续被查询返回的每个后续行覆盖。您需要ListView
代替。
如何填充这是另一回事。我建议您使用CursorLoader
某种风格,但由于您已经在等待查询同步返回,因此您可能会发现ArrayAdapter
更简单的替代方案。
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);
通过迭代values
:
Cursor
的位置
while (res.moveToNext()) {
values.add(new String(
"Name: " + res.getString(1) + "\n" + "Age: " +
res.getString(2) + "\n" + "Gender: " + res.getString(3) + "\n\n");
}
这假设values
是ArrayList<String>
,在这种情况下,您可能会从阅读https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView中受益
答案 1 :(得分:0)
您尝试多次填充相同的TextView。因此,光标的最后结果将设置为TextView。 我建议创建一个ListView并用适配器填充它,然后在适配器中设置行项。