2013-05-06 148 views
0

我创建了一个数据库,其内容显示在表格布局中。当我插入数据库时​​数据显示在表格中。直到这工作正常。但问题是,当我点击一行其内容不显示在烤面包(而不是如果我想显示在另一个页面)。只有最后一行被点击,此外,其列只显示索引设置。提前致谢。显示从数据库中检索表格的整行数据

这是我的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

两件事情我可以看到:

  1. 在​​,您要分配同一个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(),您呼叫displayDB()之后设置onClickListener为一排,所以只有最后一行监听器连接到它。将OnClick()附加到您正在创建的每一行,并且这可以在创建行的循环中完成。
+0

非常感谢...我可以赶上你的第二点,我已经实施it.its工作正常,即现在我可以点击每一行。但仍然相同的价值显示每个click.i无法让你的第一point.how我应该为每一行分配唯一的id。你可以亲切地配合它,因为它是非常有用的。预先感谢 – 2013-05-06 09:48:40

+0

你可以编辑我给出的代码吗?我会非常感谢 – 2013-05-06 10:01:21

+0

检查更新后的答案,添加了一些示例代码! – 2013-05-06 10:33:52

相关问题