我创建了一个数据库,其内容以表格布局显示。当我插入数据库时,数据显示在表格中。直到它的工作正常。但问题是当我点击一行时其内容未显示在吐司中(相反,如果我想在另一页显示)。只有最后一行是此外,仅显示其索引设置为最后的列。提前谢谢。
这是我的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());
}
}
答案 0 :(得分:1)
我注意到两件事:
在displayDB()
中,您为每一行分配相同的ID。为每个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()
附加到您正在创建的每一行,这可以在创建行的循环中完成。