2011-08-28 3 views
0

Je crée une activité qui contient une table. Lors de la sélection d'une ligne, je souhaite mettre à jour ou supprimer la ligne via les options du menu contextuel. La table est dans la vue TableLayout. Chaque ligne est ajoutée à TableLayout en tant que vue TableRow, et pour chaque TableRow je l'ai enregistrée pour le menu contextuel avec registerForContextMenu (tr);Méthode onContextItemSelected pour une ligne de table

Les options du menu contextuel s'affichent lors de la sélection d'une ligne, mais le problème est que j'ai besoin du numéro de la ligne sélectionnée. J'ai pensé que cela pourrait être réalisé avec le code source suivant dans la méthode onContextItemSelected (MenuItem item):?

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    int selectedRow = (int) info.id; 

mais le AdapterContextMenuInfo est toujours null.

Puis-je obtenir la ligne du tableau par une autre méthode?

+0

Cela ne fonctionnera pas. Utilisez un ListActivity/ListView. –

Répondre

1

toujours à la recherche d'une réponse à cette pour voir s'il y a une meilleure façon, mais lorsque vous créez votre ligne de table, vous pouvez définir une étiquette, puis le récupérer

Je possède ce travail avec le onClickListener:

private void AddRow(String rowNo) 
{ 
final TableLayout table = (TableLayout) findViewById(R.id.my_table); 
final TableRow tr = (TableRow) getLayoutInflater().inflate(R.layout.table_row_item, null); 

tr.setTag(rowNo); 

TextView tv; 
    tv = (TextView) tr.findViewById(R.id.rowNo); 
    tv.setText(rowNo);  

    table.addView(tr); 
    tr.setOnClickListener(mClickListener);  
} 

Ensuite, dans le OnClickListener:

private OnClickListener mClickListener = new OnClickListener() 
    {   
     public void onClick(View v) 
     { 
     try 
      {       
      String clickedRow = (String) v.getTag(); 
      Toast toast = Toast.makeText(mContext, clickedRow, Toast.LENGTH_SHORT); 
       toast.show(); 
      } 
     catch (Exception ex) 
      {         
      Toast toast = Toast.makeText(mContext, ex.toString(), Toast.LENGTH_SHORT); 
      toast.show();   
      } 

     } 
    }; 

à moins que je peux trouver une autre solution ,, je vais utiliser la même idée pour le ContextMenu

Le

- public boolean onContextItemSelected(MenuItem item) 

ne dispose pas d'un paramètre de vue, mais

- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 

le fait,

donc je suppose que je vais utiliser une variable de niveau de classe pour stocker la ligne en cours dans l'événement onCreateContextMenu et récupérez-le dans onContextItemSelected

+0

La vue onCreateContextMenu qui est retournée est le tablelayout, pas la ligne du tableau, ce qui n'a pas pu être fait. J'ai ajouté un onLongClickListener qui retourne la ligne en tant que vue et là, je définis la variable rowClicked au niveau de la classe. Ne se sent pas comme la meilleure solution, mais cela fonctionne –

Questions connexes