2013-04-09 10 views
13

Ho 16 pulsanti e li contrassegno per abbinare alcuni termini impostati ai pulsanti e importati dal database sqlite. Così, i codici nei loro come questo:Come impostare più tag su un pulsante?

// labelForButton and tagForButton 
     class MyStruct { 
     public MyStruct (String lab, String t){ 
     label = lab; 
     tag = t; 
    } 
     private String label; 
     private String tag; 
     } 

mDbHelper.open(); 

      Cursor c = mDbHelper.getSpojnice(generateWhereClause()); 

      ArrayList<MyStruct> labelsA = new ArrayList<MyStruct>(); 
      ArrayList<MyStruct> labelsB = new ArrayList<MyStruct>(); 

      labelsA.add(new MyStruct(c.getString(2), "1")); // this tag should be the same to button that matches 
      labelsB.add(new MyStruct(c.getString(3), "1")); 
      labelsA.add(new MyStruct(c.getString(4), "2")); 
      labelsB.add(new MyStruct(c.getString(5), "2")); 
      labelsA.add(new MyStruct(c.getString(6), "3")); 
      labelsB.add(new MyStruct(c.getString(7), "3")); 
      labelsA.add(new MyStruct(c.getString(8), "4")); 
      labelsB.add(new MyStruct(c.getString(9), "4")); 
      labelsA.add(new MyStruct(c.getString(10), "5")); 
      labelsB.add(new MyStruct(c.getString(11), "5")); 
      labelsA.add(new MyStruct(c.getString(12), "6")); 
      labelsB.add(new MyStruct(c.getString(13), "6")); 
      labelsA.add(new MyStruct(c.getString(14), "7")); 
      labelsB.add(new MyStruct(c.getString(15), "7")); 
      labelsA.add(new MyStruct(c.getString(16), "8")); 
      labelsB.add(new MyStruct(c.getString(17), "8")); 

      Collections.shuffle(labelsA); 
      Collections.shuffle(labelsB); 

      a1.setText(labelsA.get(0).label); 
      a1.setTag(labelsA.get(0).tag); 
      a1.setOnClickListener(clickListener); 
      b1.setText(labelsB.get(0).label); 
      b1.setTag(labelsB.get(0).tag); 
      b1.setOnClickListener(clickListener); 
      a2.setText(labelsA.get(1).label); 
      a2.setTag(labelsA.get(1).tag); 
      a2.setOnClickListener(clickListener); 
      b2.setText(labelsB.get(1).label); 
      b2.setTag(labelsB.get(1).tag); 
      b2.setOnClickListener(clickListener); 
. 
. 
. 
. 
} 
} 

Così, ho bisogno di A1 e B1 abbiano stessi tag, anche A2 e B2 e così via.

MA, ho anche bisogno di qualche altro motivo per tutti i pulsanti A hanno tag per esempio "A" e tutte le B "B". Quindi, come impostare più tag, nel mio caso due, su un pulsante?

EDIT:

ho aggiunto questo al mio string.xml:

<item type="id" name="KOLONA1"/> 
<item type="id" name="KOLONA2"/> 

tag ha poi aggiunto:

a1.setTag(R.id.KOLONA1, labelsA.get(0).tag); 
b1.setTag(R.id.KOLONA2, labelsA.get(0).tag); 

risposta

8

Si dovrebbe utilizzare il metodo setTag(int key, Object tag), che prende anche un secondo parametro key. Questo vi permetterà di impostare più tags su ogni Button come questo:

button.setTag(1,object1); 
button.setTag(2,object2); 
+0

Sì, ma come implementare che nel mio codice quando ho qualcosa di simile pubblico MyStruct (String lab, String t) e più tardi puoi vedere come lo uso? – marjanbaz

+0

Mi dispiace ma posso solo darti suggerimenti e suggerimenti.Non posso implementarlo per te. –

+0

Ho aggiunto al mio primo post del codice, puoi almeno controllare se è OK? – marjanbaz

4

prova:

button.setTag(R.id.resource_id1,obj1); 
button.setTag(R.id.resource_id2,obj2); 
button.setTag(R.id.resource_id3,obj3); 

e per ottenere i tag, utilizzare

v.getTag(R.id.resource_id1); 
v.getTag(R.id.resource_id2); 
v.getTag(R.id.resource_id3); 

ma, questo restituisce solo oggetti. devi digitarlo.

+1

illegaleargumentexception –

+0

quando si ottiene l'eccezione, mentre si imposta o si ottiene –

+0

La chiave deve essere un ID risorsa specifico dell'applicazione. Una vista può avere solo un tag! –

19

Se avete bisogno di aggiungere tag multipli in un'unica vista, allora è necessario definire l'ID per ogni tag nel strings.xml file, come:

<item type="id" name="section" /> 
<item type="id" name="hide_show" /> 

Dopo aver aggiunto la chiave è possibile utilizzare queste chiavi nel file di java come qui di seguito :

rowView.setTag(R.id.section,mSectionList.get(position)); 
rowView.setTag(R.id.hide_show,"close"); 

Questo imposterà il tag. Al momento di ottenere tag è necessario typecast l'oggetto che in origine si imposta piace:

String mSection=(String)rowView.getTag(R.id.section); 
String isOpen=(String)rowView.getTag(R.id.hide_show); 
+1

Ciò consente di risparmiare la mia giornata. –

+1

Questo funziona .... –

1

Definire l'ID della chiave in strings.xml e quindi ottenere attraverso l'id esempio:

In String.xml dichiarare il seguente codice

<item type="id" name="date" /> 

<item type="id" name="name" /> 

ora impostare il tag come seguire

share.setTag(R.id.date,it.adjournDate); 
share.setTag(R.id.name,it.partyName); 

Share è il mio nome pulsante

Ora finalmente ottenere il tag nel pulsante di cui si desidera che questi valori ascoltatore in questo modo:

v.getTag(R.id.name) 
v.getTag(R.id.date) 
+0

Usalo in questo modo

Problemi correlati