2011-01-24 12 views
12

मैं एक एक्सएमएल संसाधन फ़ाइल से एट्रिब्यूटसेट पढ़ने की कोशिश कर रहा हूं। प्रासंगिक कोड निम्नलिखित है:मैं अपने एक्सएमएल संसाधनों से एट्रिब्यूटसेट नहीं पढ़ सकता

//This happens inside an Activity 
     Resources r = getResources(); 
     XmlResourceParser parser = r.getXml(R.layout.testcameraoverlay); 
     AttributeSet as = Xml.asAttributeSet(parser); 

     int count = as.getAttributeCount(); //count is 0!!?? 

count == 0, तो एंड्रॉयड बिल्कुल कोई गुण नहीं पढ़ रहा है!

एक्सएमएल फ़ाइल (R.layout.testcameraoverlay):

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:text="@string/app_name" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"> 
</TextView> 

क्यों मैं गुण नहीं पढ़ सकते हैं?

+0

मैं इस के साथ ज्यादा काम नहीं किया है, लेकिन क्या तुम जानते हो अगर आप मूल तत्व पर शुरू या यदि पार्सर रूट तत्व से पहले शुरू होता है? मैं सोच रहा हूं कि अगर आप getnext को कॉल करते हैं तो यह आपको रूट तत्व में ले जाएगा या नहीं। –

उत्तर

15

समस्या पार्सर के कामकाज की गलतफहमी थी। लाइन के बाद:

XmlResourceParser parser = r.getXml(R.layout.testcameraoverlay); 

पार्सर दस्तावेज़ की शुरुआत में है और अभी तक किसी भी तत्व को नहीं पढ़ा है, इसलिए कोई attributeset है क्योंकि गुण हमेशा वर्तमान तत्व के सापेक्ष निश्चित रूप से कर रहे हैं। तो यह तय करने के लिए मैं जिसके बाद तत्वों से अधिक पुनरावृत्ति है जब तक मैं करने के लिए "TextView" मिल करना था:

AttributeSet as = null; 
    Resources r = getResources(); 
    XmlResourceParser parser = r.getLayout(R.layout.testcameraoverlay); 

    int state = 0; 
    do { 
     try { 
      state = parser.next(); 
     } catch (XmlPullParserException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     }  
     if (state == XmlPullParser.START_TAG) { 
      if (parser.getName().equals("TextView")) { 
       as = Xml.asAttributeSet(parser); 
       break; 
      } 
     } 
    } while(state != XmlPullParser.END_DOCUMENT); 
+2

मैं भी आपको धन्यवाद देता हूं। –

0

अगर मैं सही समझते हैं, आप TextView या आईडी के अंदर पाठ और इतने पर उदाहरण के लिए TextView से गुण पढ़ने की जरूरत है?

इस प्रकार मैं इसे बनाना होगा:

TextView text_res = (TextView) findViewById(R.id.TextView01); 

String text_inTextView; 
String id_fromTextView; 

text_inTextView = text_res.getText(); 
id_fromTextView = String.valueOf(text_res.getId()); 

और इतने पर ...

मुझे आशा है कि यह तुम क्या जरूरत है।

+0

नहीं। इस मामले में TextView अभी तक मौजूद नहीं है, इसके बजाय यह एक XML संसाधन फ़ाइल में निहित है। मैं इस संसाधन फ़ाइल को पढ़ना चाहता हूं और इससे टेक्स्टव्यू बनाना चाहता हूं, लेकिन मुझे कोई भी विशेषता नहीं मिल रही है। – Roland

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