2011-06-14 18 views
5

मैं वास्तव में इस पर अटक गया हूं। मैं एक साधारण टेक्स्ट्सविचर करने की कोशिश कर रहा हूं जो मात्रा में वृद्धि करेगा और मात्रा के आधार पर कीमत अपडेट करेगा। अभी मेरे एक्सएमएल में मेरे पास टेक्स्टव्यूचर के भीतर टेक्स्टव्यू की तरह कुछ है जो मात्रा बढ़ाने के लिए है। मुझे findViewById(R.id.quantity) के साथ टेक्स्टव्यू मिलता है।टेक्स्टस्विचर नल पॉइंटर त्रुटियां

तो यह है कि क्या मैं सेटअप करने के लिए वेतन वृद्धि मात्रा (मैं ViewFactory implemementing हूँ)

switcher = (TextSwitcher) findViewById(R.id.switcher); 
switcher.setFactory(this); 
quantity = (TextView) findViewById(R.id.quantity); 

मैं भी makeView()

@Override 
    public View makeView() { 
     return quantity; 
    } 

इसके अलावा जब एक वेतन वृद्धि बटन अधिभावी कर रहा हूँ खोजने के लिए है दबाया जाता है कि मैं काउंटर बढ़ाता हूं और स्विचर पर पाठ को वर्तमान गिनती पर सेट करता हूं। इस तरह:

switcher.setText(String.valueOf(currentQuantity)); 

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं ?? मैं इस लाइन में मेरी nullpointer बार आ रही है:

switcher.setFactory(this); 

यहाँ एक्सएमएल टुकड़ा है:

<TextSwitcher android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/switcher"> 
      <TextView android:text="TextView" android:id="@+id/quantity" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> 
     </TextSwitcher> 
+0

आप पोस्ट कर सकते हैं आपका एक्सएमएल? – Torid

+0

यकीन है कि इसे अपडेट किया गया – HAxxor

उत्तर

20

Documentation for TextSwitcher से:

setText (CharSequence पाठ) अगले दृश्य और अगले दृश्य में स्विच का पाठ सेट करता है। इसका उपयोग पुराने पाठ को एनिमेट करने और अगले पाठ को एनिमेट करने के लिए किया जा सकता है।।

आप कम से कम दो पाठ दृश्य, पुराने पाठ के साथ, और एक की आवश्यकता होगी में नया पाठ प्राप्त करते हैं और चेतन करने के लिए इसका मतलब है निम्न XML काम करना चाहिए:

<TextSwitcher 
     android:id="@+id/counter" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="1"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
    </TextSwitcher> 
+0

मुझे याद आया है कि आपको कम से कम दो टेक्स्ट दृश्यों की आवश्यकता होगी " ' android.view.InflateException: बाइनरी एक्सएमएल फ़ाइल लाइन # 0: व्यूस्विचर 'में 2 से अधिक विचार जोड़ नहीं सकते; एफ – murt

+0

@murt ध्यान दें कि यह उत्तर 2011 में लिखा गया था, तब से वे व्यूस्विचर के व्यवहार को बहुत अच्छी तरह से बदल सकते हैं। – Jave

1

सुनिश्चित करें कि आप setContentView बुलाया TextSwitcher

+0

यह सही xml फ़ाइल पर सेट है। – HAxxor

+0

इसे अपनी लेआउट फ़ाइल के नाम पर सेट करें। उदाहरण के लिए, यदि आपका लेआउट simplelist.xml है, तो आप 'setContentView (R.layout.simplelist)' (आदर्श रूप से अपनी ऑनक्रेट विधि की शुरुआत में) को कॉल करेंगे –

+0

यह पहले से ही उस पर सेट है। इसके पास setContentView – HAxxor

1

Mmm..interesting की तलाश करने से पहले, मैं यहां पर एक ही समस्या थी। मेरे मामले में दो समस्याएं थीं, सबसे पहले मैं makeView से शून्य वापस लौट रहा था। मुझे विश्वास है कि आपका केस नहीं है क्योंकि आप findViewById से इसका संदर्भ प्राप्त कर रहे हैं (हालांकि सावधान रहें, कभी-कभी यह विधि विफल हो जाती है और आपको एक शून्य संदर्भ देता है, मैं आपको एक ब्रेकपॉइंट डालने की सलाह दूंगा और सुनिश्चित करूँगा कि आपके पास शून्य सूचक नहीं है)।

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

1

मुझे findViewById लौटने के साथ एक ही विचित्र समस्या मिली है। खोदने के कुछ घंटों के बाद, मैं अंततः इस मुद्दे को हल करने में सक्षम था: यह मेरे कोड में एक गलती है। एक अच्छी संभावना है कि आपको समान गलतियां हो रही हैं।

मेरे कोड था (मूल नहीं कोड, चित्रण प्रयोजन के लिए):

public class MyTextSwitcher extends TextSwitcher { 
public MyTextSwitcher(Context context, AttributeSet attrs) { 
    super(context); 
} 

त्रुटि निर्माता कॉल के साथ है। निर्माता में कोड चीजें काम करने के लिए निम्नलिखित को बदला जाना चाहिए:

super(context, attrs); // note the extra attrs parameter 

गलती (और अन्य वर्गों में समान गलतियों) सभी "नव" परिभाषित संसाधनों findViewById को दिखाई नहीं हो सकता है।

मुझ पर शर्म आती है मैंने आज भी दो बार एक ही गलती की है!

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