2011-03-09 12 views
20

मैं एक ऐसा मान पास करना चाहता हूं जो टेक्स्ट व्यू के माध्यम से रनटाइम पर जेनरेट किया जाएगा। पाठ संपत्ति का उपयोग किसी अन्य डेटा के लिए किया जाता है और जिस डेटा को मैं पास करना चाहता हूं उसे प्रदर्शित नहीं किया जाएगा। तो, यह एक छिपे हुए टैग की तरह है। क्या टेक्स्टव्यू के साथ करना संभव है? यदि हां, तो टेक्स्ट व्यू की कौन सी संपत्ति।टेक्स्ट व्यू में छुपा फ़ील्ड/टैग?

सादगी के लिए कल्पना करें कि मैं डेटा तालिका से आईडी और टेक्स्ट खींचता हूं। अब पाठ टेक्स्टव्यू पर प्रदर्शित होता है लेकिन जब मैं किसी अन्य फ़ंक्शन में तालिका की उस विशेष पंक्ति के संदर्भ को पास करना चाहता हूं, तो मैं आईडी को तर्क/संभाल के रूप में पास करना चाहता हूं। इसलिए, आईडी छिपी जाएगी और टेक्स्ट व्यू से जुड़ी होगी। मैं यह कैसे कर सकता हूं? यदि संभव नहीं है तो क्या आप इसे पूरा करने के लिए कोई विकल्प सुझा सकते हैं? बीटीडब्ल्यू, टेक्स्ट व्यू एक सूची दृश्य में एम्बेडेड है।

एडाप्टर कोड:

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

उत्तर

35

setTag(int, Object) और getTag(int) की कोशिश करो। ऐसे संस्करण भी हैं जो कुंजी नहीं लेते हैं, अगर आप केवल एक मान स्टोर करना चाहते हैं। दस्तावेज़ों से:

इस व्यू से जुड़े टैग को सेट करता है। एक टैग का उपयोग को अपने पदानुक्रम में चिह्नित करने के लिए किया जा सकता है और पदानुक्रम के भीतर अद्वितीय नहीं होना चाहिए। टैग का उपयोग के भीतर डेटा को अन्य डेटा संरचना के बिना किसी भी दृश्य के भीतर संग्रहीत करने के लिए भी किया जा सकता है।

तो तुम कर सकते हैं:

textView.setTag(myValue); 

और के साथ बाद में इसे वापस प्राप्त:

myValue = textView.getTag(); 

के बाद से इंटरफ़ेस Object का उपयोग करता है, तो आप डाले जोड़ने की आवश्यकता होगी। उदाहरण के लिए, यदि आपका मूल्य एक int है:

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

और:

myInt = (Integer) textView.getTag(); 

संपादित - उपवर्ग और टैग, उपयोग जोड़ने के लिए:

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

यह अच्छा लग रहा है। हालांकि, मैं अभी भी अटक गया हूं क्योंकि मुझे यकीन नहीं है कि इसका उपयोग सूची एडाप्टर के साथ किया जा सकता है? आप जानते हैं कि टेक्स्टव्यू की संसाधन आईडी को नई int [] {R.id.txtEmployee} जैसी संसाधन आईडी की आपूर्ति करके ListView को पॉप्युलेट करने के लिए हम कर्सर और एडाप्टर का उपयोग कहां करते हैं? इससे पहले कि मैं ListView के लिए एडाप्टर सेट करने से पहले कर्सर द्वारा टेक्स्टव्यू के लिए टैग कैसे सेट कर सकता हूं? – redGREENblue

+0

क्या आप अपनी एडाप्टर बनाने के लिए उपयोग की जाने वाली लाइन पोस्ट कर सकते हैं? उस से मैं टैग जोड़ने के लिए आवश्यक सबक्लासिंग कोड लिख सकता हूं। –

+2

आप एडाप्टर को उपclass कर सकते हैं और टैग सेट करने के लिए 'getView' ओवरराइड कर सकते हैं। –

6

आप setTag() और getTag() उपयोग कर सकते हैं।

3

ऐसा करने का एक तरीका यह होगा कि आपकी सूची एडाप्टर सूची के प्रत्येक आइटम के लिए टेक्स्ट व्यू के बजाय लेआउट को बढ़ाए। फिर आपके पास लेआउट में छिपा अन्य (अदृश्य) फ़ील्ड हो सकते हैं।

एक्सएमएल इस प्रकार दिखाई देंगे:

<?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

पीछे मुड़कर देखें तो मुझे लगता है कि टेड का जवाब आपको जो चाहिए उसे अधिक उपयुक्त है। मेरा सूचना के लिए बेहतर अनुकूल है जिसे रनटाइम पर गतिशील रूप से दिखाने/छिपाने की आवश्यकता हो सकती है। – Cephron

संबंधित मुद्दे