Reputation: 35
I have created a database and its contents are shown in a table layout .When I insert into the database the data is shown in the table. Up to this its working fine.But the problem is that when i click on a row its contents are not shown in toast(rather if i want to show in another page).only the last row is getting clicked moreover the column whose index is set at last is only shown. thanks in advance.
this is my xml page
<?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>
now the SampleTableActivitys.java page is given here....
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);
}
});
}
the columns are created using this...
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();
}
}
}
the database is created here....
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());
}
}
Upvotes: 0
Views: 1662
Reputation: 1669
Two things i could notice :
In displayDB()
, you are assigning same Id to each row. Assign unique Ids to each one.
You can assign unique id using something like this inside your loop :
row.setId(increment+10);
increment++;
You can initialize increment
to 100 or any other value, outside the loop.
Edit : Complete Code
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()
, you are setting onClickListener
for a row after calling displayDB(), so only last row has listener attached to it. Attach OnClick()
to each row that you are creating and this can be done in the loop where you create rows.Upvotes: 1