मैं 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

मैंने इंटरफेस का उपयोग करने की कोशिश की है, लेकिन या तो मैंने इसे गलत किया है या यह काम नहीं करता है। कृपया मदद करें। इंटरफेस के लिए अन्य विकल्प क्या हैं?

संपादित करें: ऐसा लगता है कि आपको मेरी समस्या नहीं मिली है। मैं बस इस साइट के लोगों, मेरे कस्टम संवाद से फ्रैगमेंट में शामिल लिस्टेडैप्टर तक पहुंचना चाहता हूं।

0
Chain Cross 2 अगस्त 2018, 17:36
तो संक्षेप में आप चाहते हैं कि जब कस्टमडिअलॉग डीबी में डेटा बदलता है तो खंड अपने दृश्य को अपडेट करना चाहता है?
 – 
George Arokiam
2 अगस्त 2018, 17:50
हाँ बस....
 – 
Chain Cross
2 अगस्त 2018, 17:59

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()
0
redlabrat 2 अगस्त 2018, 18:08
सचमुच? मुझे बताएं कि आपको अपनी चांदी की गोली कब मिलेगी।
 – 
redlabrat
2 अगस्त 2018, 19:15

इसे प्राप्त करने के लिए कई दृष्टिकोण हैं

  1. फ़्रैगमेंट की आवृत्ति को CustomDialog जैसे CustomDialog dialog = new CustomDialog(fragment) पर भेजें। अब जब CustomDialog में खंड का संदर्भ है, तो आप उस खंड में एक विधि को कॉल कर सकते हैं जो डीबी से नया डेटा लाएगा और इसके विचारों को अपडेट करेगा

  2. इवेंटबस लाइब्रेरी का प्रयोग करें। आप Fragment को EventBus के श्रोता के रूप में पंजीकृत करेंगे और onEventMainThread(YourEventName event) को लागू करेंगे। और CustomDialog db को अपडेट करने के बाद YourEventName ईवेंट को EventBus पर पोस्ट करेगा। EventBus इस घटना को खंड में वितरित करेगा क्योंकि यह YourEventName को सुनने के लिए पंजीकृत है

  3. टुकड़े के onResume में विचारों को ताज़ा करने का प्रयास करें। यह उस स्थिति में काम करेगा जहां संवाद और खंड एक साथ उपलब्ध नहीं हैं

0
George Arokiam 2 अगस्त 2018, 18:09
आपका नंबर 1 काम नहीं करेगा। मेरे पास 4 टुकड़े हैं, जो सभी अलग हैं। तुम्हारी ना। 3 मेरी समस्या है, दृश्य तभी अपडेट होता है जब मैं टैब बदलता हूं। मैं आपके नंबर 2 से परिचित नहीं हूं
 – 
Chain Cross
2 अगस्त 2018, 18:18
तो आप एक कस्टम संवाद से सभी 4 टुकड़े अपडेट करना चाहते हैं?
 – 
George Arokiam
2 अगस्त 2018, 18:26
हाँ एक डायलॉग। लेकिन सभी 4 अंशों को अपडेट करें। सही?
 – 
George Arokiam
2 अगस्त 2018, 18:29
नहीं, सिर्फ एक टुकड़ा
 – 
Chain Cross
2 अगस्त 2018, 18:30
तब मुझे समाधान 1 के साथ कोई समस्या नहीं दिखाई देती है। एक नए कस्टम खंड को खंड निर्दिष्ट करने के बाद आप loadCustomActionBar को कॉल कर रहे हैं जो एक नया CustomDialog बनाता है। तो हर बार जब आप loadCustomActionBar को कॉल करते हैं तो एक नया CustomDialog होने वाला है जो वर्तमान खंड का संदर्भ रखता है
 – 
George Arokiam
2 अगस्त 2018, 18:33