显示从数据库检索的表的整行数据

时间:2013-05-06 08:08:42

标签: android

我创建了一个数据库,其内容以表格布局显示。当我插入数据库时​​,数据显示在表格中。直到它的工作正常。但问题是当我点击一行时其内容未显示在吐司中(相反,如果我想在另一页显示)。只有最后一行是此外,仅显示其索引设置为最后的列。提前谢谢。

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

1 个答案:

答案 0 :(得分:1)

我注意到两件事:

  1. displayDB()中,您为每一行分配相同的ID。为每个ID分配唯一的ID。 您可以在循环中使用类似的内容分配唯一ID:

    row.setId(increment+10);
    increment++;
    

    您可以将increment初始化为100或循环外的任何其他值。

  2. 修改:完整代码

        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()中,您在调用displayDB()之后为行设置onClickListener,因此只有最后一行附加了侦听器。将OnClick()附加到您正在创建的每一行,这可以在创建行的循环中完成。