2013-06-17 3 views
0

je sais que je peux l'utiliser pour chaque tablerow mais il est très long Codecomment détecter que tablerow a été pressé

setOnClickListener(new OnClickListener() { 
    public void onClick(View v) 
     { 
      //perform action 
     } 
    }); 

mais j'ai 12 ligne du tableau, je pense que cela est très long .. peut-être avec cette structure

tablelayout { 
if (tablerow.id = 1) { 
    // action if i pressed the first row 
} else if (tablerow.id = 2) { 
    // action if i pressed the second row 
} 
} 

Répondre

1

Vous pouvez appeler setOnItemClickListener directement sur votre ListView. Ainsi, au lieu d'appeler setOnClickListener dans votre méthode de l'adaptateur getView, il suffit d'utiliser ceci:

ListView mListView = (ListView) findViewById(R.id.listview);//or whatever the id is 
mListView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     //then use a switch statement 
     switch(position) { 
      case 1 : 
       //do something if first row is clicked 
       break; 
      case 2 : 
       //row 2 clicked 
       break;//don't forget these breaks 
     } 
    } 
}); 
+0

Mais je n'ai pas ListView, j'ai TableLayout ... Je ScrollView> TableLayout> 12 TableRow – user1959076

+0

@ user1959076, la même méthode fonctionnera pour votre 'TableLayout', ou toute sous-classe d'un' AdapterView'. – Phil

0

Vous pouvez utiliser View.setTag(Object obj):

OnClickListener mListener = new OnClickListener() { 
    public void onClick(View v) { 
     Integer tag = (Integer)v.getTag(); 
     switch (tag.intValue()) { 
      case ROW1: ... 
     } 
    } 
}); 

et le temps que vous remplissez vos lignes juste faire (peut-être dans une boucle au-dessus toutes les lignes): ids

TableRow row = tableLayout.findViewById(ROW1); 
row.setTag(ROW1); 
row.setOnClickListener(mListener); 

Par ailleurs, la balise peut également être mis en XML ...

0

Si vous utilisez une TableLayout, vous pouvez ajouter l'OnClickListener individuel aux éléments qui se trouvent dans votre TableRow (qui se trouve dans votre TableLayout). Par exemple, si vous avez un bouton et un TextView à l'intérieur d'un TableRow et que vous voulez que votre bouton fasse quelque chose lorsque vous cliquez dessus, vous devez ajouter le OnClickListener au bouton. Si tous les boutons vont au même endroit, mais envoyer des données différentes en fonction de la position dans le TableLayout alors vous pouvez faire quelque chose comme ceci:

String[] texts; //The different texts your button could say 
for(int i = 0; i < 12; i++){ 
    final Button yourButton = new Button(this); 
    yourButton.setText(texts[i]); 
    yourButton.setOnClickListener(new OnClickListener(){ 
    Intent i = new Intent(this, YourClass.class); 
    i.putExtra(yourButton.getText()); 
    startActivity(i); 
    } 
} 

Si votre TableRow ne contient qu'un seul élément, vous devriez utiliser un ListView au lieu d'un TableLayout comme Phil suggéré. J'espère que cela vous donnera une idée de la direction que vous pouvez prendre, mais cela dépend vraiment de ce que vous devez faire avec l'élément sur lequel vous cliquez.

0
/************ if table row is dynamic then this method else method 2 is perfect************/ 
//if we want to applay listener on dynamic tablerow then use this 
//sure that perfect 
TablRowe tr = new TableRow(this); 
tr.setClickable(true); 
tr.setId(100);// if in loop then add 1 counter with 100 like (100+counter) at end count++ it 
tr.setOnClickListener(this); 
@Override 
    public void onClick(View v) 
{ 
     switch (v.getId()) 
     { 
     case 100: 
       Toast.makeText(getApplicationContext(), "100", Toast.LENGTH_SHORT).show(); 
      break; 

     case 101: 
      Toast.makeText(getApplicationContext(), "101", Toast.LENGTH_SHORT).show(); 
      break; 
} 
/************************** for simple like this ************************/ 
    TableRow row1 = (TableRow)findViewById(R.id.row1); 
row1.setonClickListener(this); 
public void onClick(View v) 
{ 
switch (v.getId()) 
     { 
     case R.id.row1: 
      // do work 
      break; 
      }   
} 
+0

Pourriez-vous élaborer un peu plus sur votre réponse? Peut-être expliquer que 'this' doit implémenter une interface, et aussi fournir un code valide. –

+0

@ Platon Platon espère que vous maintenant facilement le supporter. – sandhu

Questions connexes