Set onclick events on textview created programmatically
20,106
Solution 1
change your code as to add OnClickListener to TextView
TextView tv;
if(c.moveToFirst())
{
do{
tv = new TextView(this);
tv.setText(c.getString(1));
tv.setTextSize(18);
tv.setTextColor(Color.BLACK);
tv.setClickable(true);
tv.setPadding(0, 10, 0, 0);
tv.setGravity(Gravity.CENTER);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do you work here
}
});
mainLayout.addView(tv);
}while(c.moveToNext());
}
Solution 2
use this
do{
TextView tv = new TextView(this);
tv.setText(c.getString(1));
tv.setTextSize(18);
tv.setTextColor(Color.BLACK);
tv.setClickable(true);
tv.setPadding(0, 10, 0, 0);
tv.setGravity(Gravity.CENTER);
tv.setId(1)
tv.setOnClickListner(this);
mainLayout.addView(tv);
}while(c.moveToNext());
and put a onClick method as below
@Override
public void onClick(View v)
{
if(v.getId()==1)
{
// do stuf here
}
}
Solution 3
use by this way...
tv.setOnClickListener(new OnClickListener()
{
public void onClick(View voew)
{
TableRow t = (TableRow) voew; //Your Layout
TextView firstTextView = (TextView) t.getChildAt(0);
String firstText = firstTextView.getText().toString();
}
});
Comments
-
Luke Villanueva almost 2 years
I create clickable textview dynamically depending on the records retrieved from the database just like this.
DBAdapter db = new DBAdapter(this); db.open(); Cursor c = db.getAllProfiles(); if(c.moveToFirst()) { do{ TextView tv = new TextView(this); tv.setText(c.getString(1)); tv.setTextSize(18); tv.setTextColor(Color.BLACK); tv.setClickable(true); tv.setPadding(0, 10, 0, 0); tv.setGravity(Gravity.CENTER); mainLayout.addView(tv); tv.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(getBaseContext(), tv.getText().toString(), Toast.LENGTH_LONG).show(); } }); }while(c.moveToNext()); } else Toast.makeText(getBaseContext(), "No Profiles", Toast.LENGTH_LONG).show(); db.close();
How can I set click events on each texview independently? On the way I see it, if I create a click event on the loop, the click event might get triggered by all textviews.
*Update tried adding events in every loop but got this error:
"cannot refer to a non-final variable inside an inner class defined in a different method".