显示从数据库中检索表格的整行数据
问题描述:
我创建了一个数据库,其内容显示在表格布局中。当我插入数据库时数据显示在表格中。直到这工作正常。但问题是,当我点击一行其内容不显示在烤面包(而不是如果我想显示在另一个页面)。只有最后一行被点击,此外,其列只显示索引设置。提前致谢。显示从数据库中检索表格的整行数据
这是我的XML页面
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/gradientb"
android:id="@+id/tableLayout1"
android:shrinkColumns="*"
android:stretchColumns="*" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/deliverylistbar" />
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal" >
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/TextView0"
android:gravity="center|left"
android:text="Id"
android:textColor="@android:color/black"
android:textSize="20dp"
android:textStyle="bold"
android:typeface="serif" >
</TextView>
<TextView
android:id="@+id/TextView1"
android:gravity="center|left"
android:text="Items"
android:textColor="@android:color/black"
android:textSize="20dp"
android:textStyle="bold"
android:typeface="serif" >
</TextView>
<TextView
android:id="@+id/TextView2"
android:gravity="center|left"
android:text="Location"
android:textColor="@android:color/black"
android:textSize="18dp"
android:textStyle="bold"
android:typeface="serif" >
</TextView>
<TextView
android:id="@+id/TextView3"
android:gravity="center|left"
android:text="PickBy"
android:textColor="@android:color/black"
android:textSize="18dp"
android:textStyle="bold"
android:typeface="serif" >
</TextView>
<TextView
android:id="@+id/TextView4"
android:gravity="center|left"
android:text="Status"
android:textColor="@android:color/black"
android:textSize="18dp"
android:textStyle="bold"
android:typeface="serif" >
</TextView>
</TableRow>
</TableLayout>
现在SampleTableActivitys.java页面在这里给出....
public class SampleTableActivity extends Activity {
/** Called when the activity is first created. */
SQLiteDatabase database;
private static String DBNAME = "sample.db";
private static String TABLE = "test";
TableLayout tableLayout;
TableRow row;
TextView firstCol;
TextView secondCol;
TextView thirdCol;
TextView fourthCol;
TextView fifthCol;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tableLayout=(TableLayout)findViewById(R.id.tableLayout1);
createDB();
insertValues();
displayDB();
row.setClickable(true);
row.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Toast.makeText(getApplicationContext(), " "+row.getTag(),
Toast.LENGTH_LONG).show();
view.setBackgroundColor(Color.WHITE);
}
});
}
创建的列使用该...
private void displayDB() {
database=openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE, null);
if(database!=null)
{
Cursor cursor=database.rawQuery("SELECT * FROM "+ TABLE, null);
Integer index0=cursor.getColumnIndex("ID");
Integer index1 = cursor.getColumnIndex("ITEMS");
Integer index2 = cursor.getColumnIndex("LOCATION");
Integer index3 = cursor.getColumnIndex("NAME");
Integer index4 = cursor.getColumnIndex("STATUS");
if(cursor.getCount()>0)
{
cursor.moveToFirst();
do
{
row=new TableRow(this);
row.setId(100);
row.setTag(cursor.getString(index0));
row.setTag(cursor.getString(index1));
row.setTag(cursor.getString(index2));
row.setTag(cursor.getString(index3));
row.setTag(cursor.getString(index4));
row.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
/*Setting up the first coloumn parameters*/
firstCol=new TextView(this);
firstCol.setText(cursor.getString(index0));
firstCol.setTextSize(16);
firstCol.setTextColor(Color.DKGRAY);
firstCol.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
row.addView(firstCol); //adding coloumn to row
/*Setting up the second coloumn parameters*/
secondCol=new TextView(this);
secondCol.setText(cursor.getString(index1));
secondCol.setTextColor(Color.DKGRAY);
secondCol.setTextSize(16);
secondCol.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
row.addView(secondCol); //adding coloumn to row
/*Setting up the third coloumn parameters*/
thirdCol=new TextView(this);
thirdCol.setText(cursor.getString(index2));
thirdCol.setTextColor(Color.DKGRAY);
thirdCol.setTextSize(16);
thirdCol.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
row.addView(thirdCol); //adding coloumn to row
fourthCol=new TextView(this);
fourthCol.setText(cursor.getString(index3));
fourthCol.setTextSize(16);
fourthCol.setTextColor(Color.DKGRAY);
fourthCol.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
row.addView(fourthCol);
fifthCol=new TextView(this);
fifthCol.setText(cursor.getString(index4));
fifthCol.setTextSize(16);
fifthCol.setTextColor(Color.BLACK);
fifthCol.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
row.addView(fifthCol);
/*Adding the row to the tablelayout*/
tableLayout.addView(row,new TableLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
}while(cursor.moveToNext());
database.close();
}
else
{
Toast.makeText(getBaseContext(), "NOT AVAILABLE", Toast.LENGTH_LONG).show();
}
}
}
在这里创建数据库....
两private void createDB() {
// TODO Auto-generated method stub
try
{
database=openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE, null);
database.execSQL("CREATE TABLE IF NOT EXISTS "+ TABLE +" (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, ITEMS TEXT, LOCATION TEXT, NAME TEXT, STATUS TEXT);");
database.close();
}
catch(Exception e)
{
Log.e("Database Creation", "Error "+e.toString());
}
}
答
两件事情我可以看到:
-
在,您要分配同一个ID每一行。为每一个分配唯一的ID。 您可以使用循环内是这样分配的唯一ID:
row.setId(increment+10); increment++;
可以初始化
increment
到100或任何其他值,外循环。
编辑:完整代码
private void displayDB() {
database=openOrCreateDatabase(DBNAME, Context.MODE_PRIVATE, null);
if(database!=null)
{
Cursor cursor=database.rawQuery("SELECT * FROM "+ TABLE, null);
**int increment =100;**
Integer index0=cursor.getColumnIndex("ID");
Integer index1 = cursor.getColumnIndex("ITEMS");
Integer index2 = cursor.getColumnIndex("LOCATION");
Integer index3 = cursor.getColumnIndex("NAME");
Integer index4 = cursor.getColumnIndex("STATUS");
if(cursor.getCount()>0)
{
cursor.moveToFirst();
do
{
row=new TableRow(this);
**row.setId(increment + 10);
increment++;**
row.setTag(cursor.getString(index0));
row.setTag(cursor.getString(index1));
row.setTag(cursor.getString(index2));
row.setTag(cursor.getString(index3));
row.setTag(cursor.getString(index4));
row.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
/*Setting up the first coloumn parameters*/
firstCol=new TextView(this);
firstCol.setText(cursor.getString(index0));
firstCol.setTextSize(16);
firstCol.setTextColor(Color.DKGRAY);
firstCol.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
row.addView(firstCol); //adding coloumn to row
/*Setting up the second coloumn parameters*/
secondCol=new TextView(this);
secondCol.setText(cursor.getString(index1));
secondCol.setTextColor(Color.DKGRAY);
secondCol.setTextSize(16);
secondCol.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
row.addView(secondCol); //adding coloumn to row
/*Setting up the third coloumn parameters*/
thirdCol=new TextView(this);
thirdCol.setText(cursor.getString(index2));
thirdCol.setTextColor(Color.DKGRAY);
thirdCol.setTextSize(16);
thirdCol.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
row.addView(thirdCol); //adding coloumn to row
fourthCol=new TextView(this);
fourthCol.setText(cursor.getString(index3));
fourthCol.setTextSize(16);
fourthCol.setTextColor(Color.DKGRAY);
fourthCol.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
row.addView(fourthCol);
fifthCol=new TextView(this);
fifthCol.setText(cursor.getString(index4));
fifthCol.setTextSize(16);
fifthCol.setTextColor(Color.BLACK);
fifthCol.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
row.addView(fifthCol);
/*Adding the row to the tablelayout*/
tableLayout.addView(row,new TableLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
}while(cursor.moveToNext());
database.close();
}
else
{
Toast.makeText(getBaseContext(), "NOT AVAILABLE", Toast.LENGTH_LONG).show();
}
}
}
- 在
OnCreate()
,您呼叫displayDB()之后设置onClickListener
为一排,所以只有最后一行监听器连接到它。将OnClick()
附加到您正在创建的每一行,并且这可以在创建行的循环中完成。
非常感谢...我可以赶上你的第二点,我已经实施it.its工作正常,即现在我可以点击每一行。但仍然相同的价值显示每个click.i无法让你的第一point.how我应该为每一行分配唯一的id。你可以亲切地配合它,因为它是非常有用的。预先感谢 – 2013-05-06 09:48:40
你可以编辑我给出的代码吗?我会非常感谢 – 2013-05-06 10:01:21
检查更新后的答案,添加了一些示例代码! – 2013-05-06 10:33:52