2013-04-09 8 views
13

Mam 16 przycisków i oznaczam je parami niektórych terminów ustawionych na przyciski i importowanych z bazy danych sqlite. Oznaczam je tak:Jak ustawić wiele znaczników do przycisku?

// 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); 
. 
. 
. 
. 
} 
} 

Potrzebuję więc A1 i B1, aby mieć te same znaczniki, również A2 i B2 i tak dalej.

ALE, potrzebuję również z jakiegoś innego powodu dla wszystkich Przyciski A mają znacznik na przykład "A" i wszystkie litery B "B". Jak ustawić wiele, w moim przypadku dwa, tagów na jeden przycisk?

EDIT:

Dodałem to do mojego string.xml:

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

Następnie dodaje tagi:

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

Odpowiedz

8

należy użyć metody setTag(int key, Object tag), która również zajmuje drugi parametr key. To pozwoli Ci ustawić wiele tags na każdym Button tak:

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

Tak, ale jak wdrożyć to w moim kodu, kiedy mam coś takiego publicznie MyStruct (String lab, String t), a później możesz zobaczyć, jak tego używam? – marjanbaz

+0

Przykro mi, ale mogę tylko dać ci wskazówki i sugestie.Nie mogę tego zaimplementować. –

+0

Dodałem do mojego pierwszego postu jakiś kod, czy możesz przynajmniej sprawdzić, czy to jest w porządku? – marjanbaz

4

try:

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

i dostać tagi, użyj

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

ale będzie to tylko powrót obiekty. musisz go wpisać typografią.

+1

illegalargumentexception –

+0

podczas uzyskiwania wyjątku podczas ustawiania lub pobierania –

+0

Klucz musi być identyfikatorem zasobu specyficznym dla aplikacji. Widok może mieć tylko jeden tag! –

19

Jeśli trzeba dodać wiele tag w jednym widoku, a następnie trzeba określić identyfikator dla każdego znacznika w strings.xml pliku jak:

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

Po dodaniu klucza można użyć tych przycisków w pliku java jak poniżej :

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

Spowoduje to ustawienie znacznika. W czasie coraz tag trzeba typecast obiektu, który pierwotnie ustawionego lubię:

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

To oszczędza mój dzień. –

+1

To działa .... –

1

zdefiniować klucz id w strings.xml a następnie dostać się przez przykład id :

W String.xml oświadczam, następujący kod

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

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

teraz ustawić znacznik jak po

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

Podziel się nazywam przycisk

Teraz wreszcie tag w przycisk gdzie chcesz te wartości słuchacz tak:

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

Użyj tego w ten sposób

Powiązane problemy