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());
    }
}
4

1 に答える 1

1

私が気付くことができる2つのこと:

  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. では、 displayDB() を呼び出した後に行をOnCreate()設定しているため、最後の行のみにリスナーがアタッチされています。作成している各行に接続します。これは、行を作成するループで実行できますonClickListenerOnClick()
于 2013-05-06T08:28:02.407 に答える