यह वास्तव में एक भ्रामक "सरल" प्रश्न है, लेकिन वास्तव में एंड्रॉइड विकास के संदर्भ में एक जटिल समस्या है।
गतिविधियां "प्रक्रिया प्रविष्टि बिंदु" हैं, जिसका अर्थ है कि आप जो भी गतिविधि देखते हैं, वह "स्टार्ट-अप पर आपके आवेदन में प्रवेश का पहला बिंदु" के रूप में कार्य कर सकती है।लोग सोचते हैं कि केवल उस गतिविधि में MAIN/LAUNCHER
इरादा फ़िल्टर शुरू होता है, लेकिन यह गलत है।
कोई भी गतिविधि "पहली गतिविधि" के रूप में कार्य कर सकती है, क्योंकि एंड्रॉइड वर्तमान सक्रिय नेविगेशन स्टैक के साथ किसी भी बिंदु से इसे पुनरारंभ कर सकता है।
वैसे भी, यह ध्यान में रखते हुए, एक गतिविधि View
दिखा सकती है, और लोग अक्सर अपने ऐप की प्रत्येक स्क्रीन को पकड़ने के लिए गतिविधि का उपयोग करते हैं (इसे एंट्री पॉइंट के रूप में उपयोग करने के बजाय, और इसमें दृश्य नियंत्रकों को स्वैपिंग ~ टुकड़े)।
तो अगर आप एक से अधिक क्रियाएँ है, तो आप इस तरह से उन दोनों के बीच डाटा साझा करने की जरूरत है, कि आप इसे ध्यान में रखना है कि दोनों गतिविधियोंपहलेके रूप में किसी भी समय शुरू किया जा सकता है ऐप की गतिविधि।
इसके लिए आपको क्या करने की जरूरत नहीं है "एक और वर्ग से सीधे पाठ दृश्य का पाठ सेट", लेकिन आप लिए नमूदार साझा डेटा संशोधित की जरूरत है।
नए जारी किए गए आधिकारिक Android Architecture ComponentsLiveData<T>
कक्षा प्रदान करते हैं, जिसमें MutableLiveData<T>
नामक उप-वर्ग है।
public class DataRepository {
private final MutableLiveData<MyData> data = new MutableLiveData<>();
public LiveData<MyData> getMyData() {
return data;
}
public void updateText(String text) {
MyData newData = data.getValue()
.toBuilder() // immutable new copy
.setText(text)
.build();
data.setValue(newData);
}
}
कहाँ:
एक और गतिविधि के लिए एक वर्ग से डेटा को अद्यतन करने के लिए आप क्या करना चाहिए एक वैश्विक डेटा के रूप में एक LiveData
public class MyApplication extends Application {
private static MyApplication INSTANCE;
DataRepository dataRepository; // this is YOUR class
@Override
public void onCreate() {
super.onCreate();
INSTANCE = this;
dataRepository = new DataRepository();
}
public static MyApplication get() {
return INSTANCE;
}
}
DataRepository
बेनकाब करना चाहिए LiveData अवगत कराया है गतिविधि इस पर सदस्यता लेती है:
public class MyActivity extends AppCompatActivity {
DataRepository dataRepository;
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication app = (MyApplication)getApplicationContext();
dataRepository = app.getDataRepository();
setContentView(R.layout.main_activity);
textView = findViewById(R.id.textview);
dataRepository.getMyData().observe(this, new Observer() {
@Override
public void onChange(MyObject myObject) {
textView.setText(myObject.getText());
}
}
}
तो इसे अपडेट करने के लिए इस ठीक से अपनी गतिविधि पाठ दृश्य अपडेट करेगा
DataRepository dataRepository = MyApplication.get().dataRepository();
dataRepository.updateText("my new text");
और: पाठ, आप DataRepository
वर्ग पाने के लिए, और उस पर updateText
फोन की जरूरत है।
मैं वास्तव में ब्रैग या कुछ भी नहीं करना चाहता, लेकिन यहां एकमात्र सही उत्तर मैंने प्रदान किया है: https://stackoverflow.com/questions/10996479/how-to-update-a-textview-of-an -एक्टिविटी-से-एक-क्लास/47637313 # 47637313 (हालांकि एली के ठीक तब तक ठीक है जब तक वे सही ढंग से मौत की प्रक्रिया को लेते हैं) – EpicPandaForce