2011-03-09 7 views
20

Çalışma zamanında oluşturulacak bir değeri TextView aracılığıyla iletmek istiyorum. metin özelliği diğer bazı veriler için kullanılır ve geçmek istediğim veriler görüntülenmez. Yani, gizli bir etiket gibi. TextView ile yapmak mümkün mü? Eğer öyleyse, hangi TextView özelliği.Gizli Alan/Etiket içinde TextView?

Basitlik için, ID ve TEXT'yi veri tablosundan çektiğimi hayal edin. Şimdi METRE TextView'de görüntüleniyor, ancak tabloyu belirli bir satırdaki referansa başka bir işleve aktarmak istediğimde ID'yi bir argüman/tanıtıcı olarak iletmek istiyorum. Bu nedenle, Kimlik gizlenecek ve TextView ile ilişkilendirilecektir. Nasıl yapabilirim? Eğer mümkün değilse, bunu başarmak için herhangi bir alternatif önerebilir misiniz? BTW, TextView bir ListView içine gömülü.

Adaptör kodu:

cursor = db.rawQuery("SELECT * FROM EmpTable", null); 

adapter = new SimpleCursorAdapter(
       this, 
       R.layout.item_row, 
       cursor, 
       new String[] {"Emp_Name"}, 
       new int[] {R.id.txtEmployee}); 

cevap

35

setTag(int, Object) ve getTag(int) deneyin. Sadece bir değeri depolamak istiyorsanız, anahtarı almayan sürümler de vardır. Şu dokümanlar:

Bu görünümü ile ilişkili etiketi ayarlar. Hiyerarşideki görüntüsünü işaretlemek için bir etiket kullanılabilir ve hiyerarşisinde benzersiz olması gerekmez. , numaralı veri içerisindeki verileri başka bir veri yapısına başvurmadan saklamak için de kullanılabilir.

textView.setTag(myValue); 

ve daha sonra geri almak:

Yani yapabileceğiniz arayüz Object kullanır

myValue = textView.getTag(); 

olduğundan, yayınları eklemeniz gerekir. Örneğin, değeri int ise:

textView.setTag(Integer.valueOf(myInt)); 

ve:

myInt = (Integer) textView.getTag(); 

Düzenleme - Alt sınıf ve etiket, kullanım eklemek için:

adapter = new SimpleCursorAdapter(this, R.layout.item_row, 
     cursor, new String[] {"Emp_Name"}, new int[] R.id.txtEmployee}) { 
    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     view.setTag(someValue); 
     return view; 
    } 
}; 
+0

Bu iyi görünüyor. Ancak, bu bir liste bağdaştırıcısı ile kullanılabilir olup olmadığından emin değilim gibi hala takılıyorum? Yeni int [] {R.id.txtEmployee} gibi textView kaynak kimliğini sağlayarak bir ListView doldurmak için bir imleç ve bir adaptör kullandığımızı biliyorsunuz? ListView için bağdaştırıcıyı ayarlamadan önce imleç tarafından döndürülen TextView için Etiketi hangi şekilde ayarlayabilirim? – redGREENblue

+0

Bağdaştırıcınızı oluşturmak için kullandığınız satırı postalayabilir misiniz? Bundan etiket eklemeniz gereken alt sınıf kodunu yazabilirim. –

+2

Bağdaştırıcıyı alt sınıflara ayırabilir ve etiketi ayarlamak için 'getView''ü geçersiz kılabilirsiniz. –

6

Sen setTag() ve getTag() kullanabilirsiniz.

3

Bunu yapmanın bir yolu, ListAdapter'inizin her bir öğe için bir TextView yerine bir mizanpajı şişirmesini sağlamak olabilir. Ardından, düzende gizlenmiş başka (görünmez) alanlarınız olabilir.

xml şöyle olabilir:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <TextView android:id="@+id/visible_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Visible text"/> 
    <TextView android:id="@+id/hidden_value" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="hidden value" 
    android:visibility="gone"/> 
</LinearLayout> 
+0

Geriye doğru bakıldığında, sanırım Ted'in cevabı ihtiyacınız olan şeylere daha uygundur. Benimki, çalışma zamanında dinamik olarak gösterme/gizleme ihtiyacı duyabileceği bilgiler için daha uygundur. – Cephron