2011-07-07 8 views
11

स्क्रीन के किसी अन्य भाग से टेक्स्टव्यू की सामग्री को गतिशील रूप से कैसे बदलें?किसी अन्य गतिविधि से टेक्स्ट बदलना

मेरे पास एक टैबएक्टिविटी क्लास है जो एक सापेक्ष लेटआउट खींचती है जिसमें टेक्स्टव्यू होता है जिसके बाद कई टैब होते हैं। प्रत्येक टैब के भीतर एक अलग इरादा है। टैब इरादे में से एक से, मैं मूल टैबएक्टविटी से टेक्स्ट व्यू के टेक्स्ट (.setText के माध्यम से) को बदलना चाहता हूं।

क्या यह संभव है?

उत्तर

28

आप Android Architecture Components का उपयोग करना चाहिए एक runOnUI अंदर हैंडलर के भीतर परिवर्तन करें:

आप एक ViewModel युक्त LiveData अपने डेटा वस्तु की (LiveData<String> मामले में आप केवल पाठ को बदलना चाहते हैं) बना सकते हैं।

जब आप अपनी लाइव डेटा ऑब्जेक्ट को Activity या Fragment से बदल देंगे, तो इस लाइव डेटा ऑब्जेक्ट के लिए देखे जाने वाले सभी अन्य गतिविधियां और टुकड़े अधिसूचित किए जाएंगे।

Official API doc has complete example with description

+3

बकाया; अच्छी तरह से काम। बहुत बहुत धन्यवाद!! – ehymel

+4

सावधान रहें कि यह उस वर्ग के प्रत्येक उदाहरण के लिए 'टेक्स्ट व्यू' को बदलेगा। –

+5

"स्थिर क्षेत्रों में एंड्रॉइड संदर्भ कक्षाएं न रखें; यह एक स्मृति रिसाव है (और त्वरित रन भी तोड़ता है)" - अब बेहतर समाधान नहीं है। इसे स्थिर बनाते समय आपको एंड्रॉइड स्टूडियो में यह चेतावनी मिल जाएगी। कोई बेहतर समाधान? –

6

अपनी टैबएक्टिविटी में एक सार्वजनिक विधि बनाएं जो टेक्स्टव्यू के टेक्स्ट को सेट करता है, फिर बच्चे गतिविधि से getParent() पर कॉल करें, इसे अपने टैबएक्टिविटी क्लास पर डालें, फिर उस सार्वजनिक विधि को कॉल करें।

+0

वाह, यह एक अच्छा विचार है, टैबएक्टिविटी क्लास में सबकुछ रखते हुए। निश्चित रूप से यह भी कोशिश करेंगे। – ehymel

0

आप मूल टैब के लिए हैंडलर को लागू करने का प्रयास कर सकते हैं जो नौकरी करता है। अपने प्रत्येक संबंधित टैब से संदेश ऑब्जेक्ट में टेक्स्ट पास करें। सुरक्षा के लिए, ब्लॉक

+1

धन्यवाद ... मैंने वास्तव में इसके बारे में सोचा और कोशिश की लेकिन शायद इसे गलत तरीके से कार्यान्वित किया। अच्छा सुझाव। – ehymel

0

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

AsynctaskFile:

OnReadyListener onReadyListener; 

public class ABCAsynctaskFile{ 

    ... 

    onReadyListener.onReady(); 

} 

public interface OnReadyListener{ 

void onReady(); 

} 


public void setOnReadyListener(OnReadyListener onReadyListener){ 

this.onReadyListener = onReadyListener; 

} 

ActivityFile:

public class ABC extends AppCompactActivity implements ABCAsynctaskFile.OnReadyListener{ 
    .. 

    ABCAsynctaskFile aBCAsynctaskFileObj = new ABCAsynctaskFile(context); 

    aBCAsynctaskFile.setOnReadyListener(ABC.this) 

} 

@Override 

public void onReady(){ 

    // Your wished changed in edit text. 

} 

यह संरचना नल पॉइंटर एक्सेप्शन को रोकने के लिए आप में मदद मिलेगी।