2013-04-09 20 views
13

Tôi có 16 nút và tôi gắn thẻ chúng để ghép nối một số cụm từ được đặt thành nút và được nhập từ cơ sở dữ liệu sqlite. Vì vậy, tôi gắn thẻ chúng như thế này:Làm cách nào để đặt nhiều thẻ thành một nút?

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

Vì vậy, tôi cần A1 và B1 để có cùng một thẻ, cũng A2 và B2, v.v.

NHƯNG, tôi cũng cần một số lý do khác cho tất cả các nút A có thẻ ví dụ "A" và tất cả chữ B "B". Vì vậy, làm thế nào để thiết lập nhiều, trong trường hợp của tôi hai, thẻ vào một nút?

EDIT:

tôi thêm này để string.xml tôi:

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

thẻ Rồi nói thêm:

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

Trả lời

8

Bạn nên sử dụng phương pháp setTag(int key, Object tag), mà cũng phải mất một tham số thứ hai key. Điều này sẽ cho phép bạn thiết lập nhiều tags trên mỗi Button như thế này:

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

Có, nhưng làm thế nào để thực hiện điều đó trong mã của tôi khi tôi có cái gì đó như nào MyStruct (String lab, String t) và sau đó bạn có thể thấy cách tôi sử dụng nó? – marjanbaz

+0

Tôi xin lỗi nhưng tôi chỉ có thể cung cấp cho bạn gợi ý và gợi ý.Tôi không thể thực hiện điều này cho bạn. –

+0

Tôi đã thêm vào bài viết đầu tiên của tôi một số mã, bạn có thể ít nhất là kiểm tra xem đó là OK? – marjanbaz

4

thử:

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

và để có được thẻ, sử dụng

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

nhưng, điều này sẽ chỉ trả lại các đối tượng. bạn cần phải soạn thảo nó.

+1

invalidargumentexception –

+0

khi bạn nhận được ngoại lệ, trong khi đặt hoặc nhận –

+0

Khóa phải là id tài nguyên dành riêng cho ứng dụng. Chế độ xem chỉ có thể có một thẻ! –

19

Nếu bạn cần phải thêm nhiều thẻ vào một điểm sau đó bạn phải xác định id cho mỗi thẻ trong strings.xml tập tin như:

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

Sau khi thêm phím bạn có thể sử dụng các phím trong file java như dưới đây :

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

Điều này sẽ đặt thẻ. Vào thời điểm nhận được thẻ bạn cần phải định kiểu đối tượng mà ban đầu bạn thiết lập thích:

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

Điều này tiết kiệm thời gian của tôi. –

+1

Làm việc này .... –

1

Xác định id chủ chốt trong strings.xml và sau đó nhận được nó thông qua id dụ:

Trong String.xml tuyên bố đoạn mã sau

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

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

bây giờ thiết lập thẻ như sau

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

Chia sẻ là tên nút của tôi

Bây giờ cuối cùng đã có được thẻ trong nút mà bạn muốn những giá trị này nghe như thế này:

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

Sử dụng nó như thế này

Các vấn đề liên quan