2011-12-20 4 views
2

J'ai choisi d'utiliser TableLayout pour dessiner des catégories de produits.TableLayout onClickListener: get Ligne/Colonne

Les données sont récupérées et restituées dynamiquement. J'y ajoute à la fois TableRow et ImageView.

Comment puis-je gérer onClickListener, lorsqu'il y a 3 éléments par TableRow?

Je ne peux pas changer la mise en page utilisée, donc je suis à la recherche de solution dans la situation actuelle

+0

Comment charger vos données dans cette table? Et pourquoi ne pouvez-vous pas changer la disposition utilisée? Définissez 'duplicateParentState' sur true sur les éléments de votre ligne et définissez un onClickListener sur votre ligne. – Jordi

+0

@Jordi Je le charge par programme. La mise en page ne peut pas être modifiée pour des raisons organisationnelles. La dernière phrase n'a pas de sens pour moi, pouvez-vous la fournir en guise de réponse? Merci –

+0

@MarekSebera: vous voulez détecter les clics des éléments de tablerow ou le tablerow lui-même ?? –

Répondre

5

OK, lorsque vous créez des lignes dynamiques, en utilisant un pour la boucle: ce faire:

  1. utilisation setTag() ou setTag(key, tag) pour chaque élément enfant de ligne du tableau en utilisant une variable incrément

  2. d'écoute setonclick pour chaque élément enfant à l'intérieur de la boucle elle-même [note: à l'intérieur boucle for]

  3. dans le onclick(View v) de onclicklisteners, vous pouvez détecter les clics individuels en récupérant le point de vue cliqué à l'aide v.getTag() [convertir balise le type de données requis]

+0

Merci, ça m'a aidé! –

+0

@MarekSebera: bienvenue! –

0

Votre mise en page gonflé aurait à ressembler à quelque chose comme ça en XML:

<TableRow android:id="@+id/somerow"> 
    <TextView android:id="@+id/row_item1" android:duplicateParentState="true" .... /> 
    <TextView android:id="@+id/row1_item2" android:duplicateParentState="true" .... /> 
    <TextView android:id="@+id/row1_item3" android:duplicateParentState="true" .... /> 
</TableRow> 

Donc, en java code, vous devriez faire quelque chose comme ceci directement après avoir gonflé la ligne:

// there is some var tableRow of type TableRow 
TextView myTextView = new TextView(......); 
myTextView.setOnClickListener(myOnClickListener); // this is the important part 
myTableRow.addView(myTextView); 
+0

et comment puis-je gérer cliquez sur 'row1_item1/2/3' avec cet attribut' duplicateParentState'? –

+0

Je pense que j'ai mal compris votre question. Je pensais que vous demandiez comment gérer 1 clickListener sur les 3 éléments. Si vous voulez avoir un clickListener séparément: tableRow.findViewById (R.id.row_item1) .setOnClickListener (myOnClickListener1); ou si vous créez dynamiquement votre TextView, ajoutez directement le onClickListener – Jordi

+0

de sorte que vous suggériez d'ajouter un onclicklistener anonyme à chaque vue que je souhaite gérer. –