हाल ही में मैं इस मामले पर खुद लड़खड़ा गया जब स्क्रॉल करने और स्नैकबैक दिखाने के लिए, बहुत से पहले गायब होने से पहले भी दिखाए गए थे। मुझे यह जानने का एक तरीका खोजना था कि क्या ऐप को स्नैकबार को रखा जाना चाहिए था।
मुझे व्यक्तिगत रूप से यह समाधान मिला।
यह सच है कि स्नैकबार अपने आप में राज्य / दृश्यता के लिए किसी भी प्रकार के श्रोता की पेशकश नहीं करता है, लेकिन आप अभी भी स्नैकबार से व्यू ऑब्जेक्ट प्राप्त कर सकते हैं (getView ();)। व्यू ऑब्जेक्ट से आपको श्रोताओं को जोड़ने के लिए कई तरह के तरीकों का उपयोग करने का मौका मिलता है।
इसे लागू करने के लिए आपको आम "ऑल-इन-वन-लाइन" टोस्ट / स्नैकबार उपयोग से बाहर जाना होगा, क्योंकि श्रोताओं को जोड़ने से शून्य वापस आ जाता है ।
मैंने अपनी आवश्यकताओं को पूरा करने के लिए व्यक्तिगत रूप से OnAttachStateChangeListener पाया।
यदि यह आपके लिए उपयोगी हो सकता है तो मेरे कोड के साथ एक स्निपर को छोड़ना।
Snackbar snack = Snackbar.make(getView(), "My Placeholder Text", Snackbar.LENGTH_LONG);
snack.getView().addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
canDisplaySnackbar = false;
}
@Override
public void onViewDetachedFromWindow(View v) {
Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
canDisplaySnackbar = true;
}
}, 1000);
}
});
snack.show();
कृपया ध्यान दें कि यह केवल मेरी ही समस्या के लिए मेरा कार्यान्वयन है, पोस्टडेलिड रननेबल के साथ हैंडलर भी आपके मामले में फिट नहीं हो सकता है। यह सिर्फ उस कार्यान्वयन का एक सामान्य विचार देना था जिसे मैंने एक स्निपेट का उपयोग करने का सुझाव दिया था जो पहले से ही मेरे पास है।