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();
                         }
                   });
Share:
20,106
Luke Villanueva
Author by

Luke Villanueva

....

Updated on July 09, 2022

Comments

  • Luke Villanueva
    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".