मैं notifyDataSetChanged()
को कॉल करना चाहता हूं लेकिन मेरी कोड संरचना एक गड़बड़ है और मैं इसके आसपास अपना रास्ता नहीं ढूंढ सकता। मेरे पास एक टुकड़ा, एक कस्टम संवाद वर्ग, और मुख्य गतिविधि है।
MainActivity.java
Fragment is created here along with 3 other fragments. Dialog is also created here
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
fragment = new FragmentHome();
loadFragment(fragment);
loadCustomActionBar("Home", false);
return true;
case R.id.navigation_foods:
fragment = new FragmentFood();
loadFragment(fragment);
loadCustomActionBar("Foods", true);
return true;
case R.id.navigation_drinks:
fragment = new FragmentDrink();
loadFragment(fragment);
loadCustomActionBar("Beverages", true);
return true;
case R.id.navigation_cart:
fragment = new FragmentCart();
loadFragment(fragment);
loadCustomActionBar("Cart", false);
return true;
}
return false;
}
};
private void loadCustomActionBar(String titleTxt, boolean bool) {
CustomDialog dialog = new CustomDialog()
.....
}
कस्टम डायलॉग
CustomDialog is responsible for updating database.
I want to call notifyDataSetChanged() here after updating database to update view as well.
Button addItem = .....
addItem.setOnClickListener(new OnClickListener() {
public void onClick() {
dialog.show();
}
});
Fragment.java
ListAdapter is located here
मैंने इंटरफेस का उपयोग करने की कोशिश की है, लेकिन या तो मैंने इसे गलत किया है या यह काम नहीं करता है। कृपया मदद करें। इंटरफेस के लिए अन्य विकल्प क्या हैं?
संपादित करें: ऐसा लगता है कि आपको मेरी समस्या नहीं मिली है। मैं बस इस साइट के लोगों, मेरे कस्टम संवाद से फ्रैगमेंट में शामिल लिस्टेडैप्टर तक पहुंचना चाहता हूं।
2 जवाब
जैसा कि मैंने आपके कोड में देखा है कि आपके पास एक चर टुकड़ा है। आपके मामले के लिए आप कुछ बेसफ्रैगमेंट क्लास को परिभाषित कर सकते हैं जिसमें आपके पास अमूर्त विधि डेटासेट चेंज() होगा। आपके सभी अलग-अलग टुकड़े बेसफ्रैगमेंट के व्युत्पन्न होंगे और आपका चर टुकड़ा बेसफ्रैगमेंट प्रकार का होगा। व्युत्पन्न टुकड़े फ़ंक्शन डेटासेट चेंज() को कार्यान्वित करेंगे जिसमें वे अपने स्वयं के एडेप्टर के लिए सूचितडेटासेट चेंज को कॉल करेंगे।
फिर आप अपने CustomDialog में कॉलबैक कर सकते हैं जो आपके वैरिएबल fragment के डेटासेट चेंज को कॉल करेगा।
class BaseFragment extends Fragment {
...
abstract void datasetChanged();
...
}
class CustomDialog extends Dialog {
...
var notifyCallback: Function;
public setCallback(Function callback) {
notifyCallback = callback;
}
}
फिर जब आप CustomDialog बनाएंगे तो कॉलबैक को अपने टुकड़े विधि डेटासेट पर सेट करें ():
customDialog.setCallback(fragment::datasetChanged());
उसके बाद, जब आपके कस्टमडिअलॉग को अपडेट के लिए सूचित करने की आवश्यकता होगी तो यह कॉलबैक फ़ंक्शन के लिए कॉल करेगा।
notifyCallback.apply()
इसे प्राप्त करने के लिए कई दृष्टिकोण हैं
फ़्रैगमेंट की आवृत्ति को CustomDialog जैसे
CustomDialog dialog = new CustomDialog(fragment)
पर भेजें। अब जब CustomDialog में खंड का संदर्भ है, तो आप उस खंड में एक विधि को कॉल कर सकते हैं जो डीबी से नया डेटा लाएगा और इसके विचारों को अपडेट करेगाइवेंटबस लाइब्रेरी का प्रयोग करें। आप Fragment को EventBus के श्रोता के रूप में पंजीकृत करेंगे और
onEventMainThread(YourEventName event)
को लागू करेंगे। और CustomDialog db को अपडेट करने के बाद YourEventName ईवेंट को EventBus पर पोस्ट करेगा। EventBus इस घटना को खंड में वितरित करेगा क्योंकि यह YourEventName को सुनने के लिए पंजीकृत हैटुकड़े के onResume में विचारों को ताज़ा करने का प्रयास करें। यह उस स्थिति में काम करेगा जहां संवाद और खंड एक साथ उपलब्ध नहीं हैं
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।