0

我创建了一个数据库,其内容显示在表格布局中。当我插入数据库时​​,数据显示在表格中。到目前为止,它工作正常。但问题是,当我点击一行时,它的内容不会显示在 toast 中(而是如果我想在另一个页面中显示)。只有最后一行被点击,而且索引为的列最后设置仅显示。提前致谢。

这是我的 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());
    }
}
4

1 回答 1

1

我可以注意到两件事:

  1. displayDB()中,您为每一行分配相同的 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();
        }
    }
}
  1. OnCreate()中,您onClickListener在调用 displayDB() 后设置了一行,因此只有最后一行附加了侦听器。附加OnClick()到您正在创建的每一行,这可以在您创建行的循环中完成。
于 2013-05-06T08:28:02.407 回答