2012-11-09 11 views
16
साथ काम नहीं कर रहा

मैं एक स्क्रीन के 3 राज्यों के लिए टुकड़े है; जोड़ें, संपादित करें और देखें। जोड़ें में मैं एक इकाई बनाता हूं और इसे सहेजता हूं। अगली बार मैं दृश्य मोड में खोलने औरEditText setText टुकड़ा

EditText entityName = (EditText) view.findViewById(R.id.entityName);  
entityName.setText(entity.getEntityname()); 

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

कोई भी विचार?

नोट: मैं Android संस्करण 2.2

+0

टुकड़े एपीआई स्तर 11 या अधिक से अधिक –

+1

@AndroidApple मुझे लगता है कि आवश्यकता होती है इसके -_- वह अनुकूलता पुस्तकालय उपयोग कर रहा है संभालने के लिए इतना सुरक्षित hes lmao – Andy

+0

ऐसा करने में गलत नहीं है हां मैं संगतता पुस्तकालय का उपयोग कर रहा हूं। –

उत्तर

69

EditText onCreateView में पाठ को रीसेट के साथ समस्या है प्रतीत होता है उपयोग कर रहा हूँ। तो यहां समाधान onResume में पाठ को रीसेट करना है। यह काम।

इसके अलावा एक्टिविटी क्रिएटिव में कोई समस्या है। मैं edittext की सामग्री को स्टार्ट में रीसेट करता हूं और यह काम करता है। [@savepopulation के लिए क्रेडिट]

+3

मैं अभी इस मुद्दे में भाग गया और देखा कि अगर स्टार्ट को बुलाया जाता है तो यह भी काम करेगा। यह ध्यान देने योग्य है कि टेक्स्टव्यू चीजों का उपयोग अपेक्षित के रूप में काम करता है लेकिन एक बार जब आप EditText या AutoCompleteTextView का उपयोग शुरू करते हैं तो आप इन समस्याओं में चलना शुरू करते हैं। – Jona

+1

यह आपको बहुत धन्यवाद। क्या आप समझा सकते हैं कि इस प्रकार की समस्या –

+1

क्यों हुई थी, 'ऑनएक्टिविटीक्रेटेड' से 'सेटटेक्स्ट' को कॉल करना भी काम नहीं करता है। आपका बहुत बहुत धन्यवाद। उस समस्या पर घंटे बिताएं। – skywall

3

इसके अलावा सक्रियता पर भी कोई समस्या है। मैं edittext की सामग्री को स्टार्ट में रीसेट करता हूं और यह काम करता है।

2

@TusharVengrulekar के अनुसार, इस तरह आप अपने टुकड़ा

public class ActionBar extends Fragment { 

private TextView lbl_title; 
private String title; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_action_bar, container, false); 
    title = "Contacts"; 
    lbl_title = (TextView) view.findViewById(R.id.lbl_title); 

    return view; 
} 

@Override 
public void onStart(){ 
    super.onStart(); 

    lbl_title.setText(title); 
} 

@Override 
public void onResume(){ 
    super.onResume(); 
} 
} 
+0

यह माता-पिता ViewController –

5

जैसा कि पहले उल्लेख implent चाहिए, EditText onCreateView में पाठ को रीसेट के साथ समस्या है प्रतीत होता है।

इसका कारण यह है एक बार एक टुकड़ा बनाया जाता है, उस समय तक हम इसे backstack से हटा दें, अपने विधि onResume के रूप में देखने के लिए फिर से नहीं बना है कहा जा सकता है है।

तो यहाँ समाधान onResume में पाठ पुनर्स्थापित करने के लिए है। यह हर समय काम करेगा, भले ही आप अपनी स्क्रीन को लॉक और अनलॉक करते हैं, भले ही वह टुकड़ा खुला हो या आप किसी अन्य खंड से वापस आ रहे हैं

हालांकि यदि आप इस डेटा को एक बंडल से सेट कर रहे हैं तो यह एक बेहतर उदाहरण है परिवर्तनीय कारण बंडल शून्य हो सकता है आप शून्य सूचक मुद्दों को प्राप्त कर सकते हैं तो

1

एंड्रॉइड में दृश्य के कुछ वर्गों को उनके कंटेनर को अलग होने पर उनकी स्थिति को सहेजना चाहिए। Fragment.onViewCreated() View.onSaveInstanceState से पहले बुलाया जाना चाहिए()। तो यदि आप Fragment.onViewCreated() विधि में कोई मान निर्धारित करते हैं। विधि View.onRestoreInstanceState (पार्ससेल योग्य स्थिति) में मान को साफ़ किया जाना चाहिए।

उदाहरण के लिए, वर्ग TextView, RecyclerView लिए

और इतने on.You TextView.java का कोड पढ़ सकते हैं:

public Parcelable onSaveInstanceState() { 
    Parcelable superState = super.onSaveInstanceState(); 

    // Save state if we are forced to 
    final boolean freezesText = getFreezesText(); 
    boolean hasSelection = false; 
    int start = -1; 
    int end = -1; 
    .... 
    if (freezesText || hasSelection) { 
     SavedState ss = new SavedState(superState); 
     .... 
    } 
    .... 
    } 

राज्य को बचाने के लिए है कि क्या नियंत्रित करने के लिए पैरामीटर के लिए कर रहे हैं: "freezesText" और "hasSelection "। TextView का चयन नहीं किया जा सकता है ताकि hasSelection गलत है। फ़ंक्शन, getFreezesText(), क्लास टेक्स्ट व्यू में भी झूठी वापसी करें। तो, टेक्स्ट व्यू राज्य को सहेज नहीं पाएगा। एडिटटेक्स्ट का कोड।जावा:

@Override 
    public boolean getFreezesText() { 
    return true; 
    } 

एडिटटेक्स्ट सत्य वापस लौटें, इसलिए EditText को राज्य को सहेजना चाहिए।

1.implement EditText.getFreezesText() और झूठे लौटने के लिए, और EditText

में चुनिंदा के राज्य स्पष्ट EditText की

2.implement onSaveInstanceState:

इस बग को ठीक करने के लिए कुछ विधि

, इस null.like वापसी:

public Parcelable onSaveInstanceState() { 
     super.onSaveInstanceState(); 
    return null; 
} 

3.use EditText.setSaveEnable (झूठा) का उपयोग करें; एक्सएमएल में

4.Add परम "saveEnable = 'असत्य'"

+0

दोस्त से एक्शनबार प्राप्त करने का मेरा आम तरीका है, आपने मेरा जीवन बचा लिया है! –