Search code examples
androidonclicklistenerandroid-tablelayout

OnClickListener on dynamic table layout


I want to add onClicklistener to the items from the dynamic table that is generated. My Code is

for(int k=0;k<i;k++)        
{

    tr[k]=new TableRow(getApplicationContext());
    tr[k].layout(0, 0, 0, 0);
        ids[k] = new TextView(getApplicationContext());
        ids[k].setText(loc_id[k]);
        ids[k].setPadding(30, 15, 30, 15);
        loc[k] = new TextView(getApplicationContext());
        loc[k].setText(loc_name[k]);      
        loc[k].setPadding(30, 15, 30    ,15);
        tr[k].setPadding(0, 1, 0, 0);   
        tr[k].addView(ids[k]);
        tr[k].addView(loc[k]);
      tl.addView(tr[k], new TableLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

}

Please help.


Solution

  • You need to add OnClickListner Interface to your activity and then add all dynamic view to setOnClickListner and finally you can catch click event for all view inside onClick(View view) method.

    Try this

    public class MainScreen extends Activity implements OnClickListener {
    
    int i = 10; // input no of row
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  // set here your layout xml name 
    
        //TableLayout tl = new TableLayout(MainScreen.this);
            TableLayout tl = (TableLayout) findViewById(R.id.table);
        for (int k = 0; k < i; k++) {
    
            TableRow tr = new TableRow(MainScreen.this);
            tr.layout(0, 0, 0, 0);
            TextView ids = new TextView(MainScreen.this);
            ids.setText(loc_id[k]);
            ids.setPadding(30, 15, 30, 15);
            TextView loc = new TextView(MainScreen.this);
            loc.setText(loc_name[k]);
            loc.setPadding(30, 15, 30, 15);
            tr.setPadding(0, 1, 0, 0);
            tr.addView(ids);
            tr.addView(loc);
            tr.setId(k); // here you can set unique id to TableRow for
                            // identification
            tr.setOnClickListener(MainScreen.this); // set TableRow onClickListner
            tl.addView(tr, new TableLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    
        }
    
        //setContentView(tl);
    }
    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
    
        int clicked_id = v.getId(); // here you get id for clicked TableRow
    
        // now you can get value like this
    
        String ids = loc_id[clicked_id];
        String loc = loc_name[clicked_id];
    
    }
    }