मान लो की

  • मेरे पास एकाधिक खातों वाला उपयोगकर्ता है।
  • प्रत्येक खाते में कई पृष्ठ हो सकते हैं जिन्हें वे नियंत्रित करते हैं।
  • पृष्ठों को एक या अधिक खातों द्वारा नियंत्रित किया जा सकता है।
  • यह सारा डेटा कक्ष डेटाबेस में संस्थाओं के साथ संग्रहीत किया जाता है {UserEntity,PageEntity,User_Page_Entity}, जहां User_Page_Entity नियंत्रण करते हैं उपयोगकर्ताओं और उनके पृष्ठों के बीच संबंध केवल उनकी प्राथमिक कुंजी आईडी संग्रहीत करके।

माई रीसाइक्लर व्यू सभी पेजों को दिखाना चाहिए, जहां इनमें से कुछ पेज वर्तमान लॉग इन उपयोगकर्ता द्वारा नियंत्रित होते हैं जहां मेरे रीसाइक्लर व्यू का एक आइटम इस तरह दिखता है:
रीसाइक्लर आइटम देखें
जहां लाल/हरा वृत्त इंगित करता है कि यह पृष्ठ वर्तमान लॉग इन उपयोगकर्ता का है या नहीं।

मेरी समस्या यह है कि मेरा पुनर्चक्रण दृश्य डेटा के दो स्रोतों पर निर्भर करता है:

  1. LiveData<List<PageEntity>> जो डेटाबेस में संग्रहीत सभी पृष्ठों को दिखाता है।
  2. LiveData<List<User_Page_Entity>> जो इंगित करता है कि इनमें से कौन सा पृष्ठ वर्तमान उपयोगकर्ता द्वारा नियंत्रित है।

चूँकि रूम अपने सभी पर्यवेक्षकों के लिए एक ही समय में एक नोटिफ़ायर लॉन्च करता है, जब भी डेटाबेस में कोई बदलाव होता है, अगर मैंने दोनों स्रोतों पर एक पर्यवेक्षक को इनिशियलाइज़ किया और जब भी उन्होंने एडॉप्टर पर एक notifyDataSetChanged लॉन्च किया, तो इसका परिणाम दो notifyDataSetChanged ने उसी समय एक अपवाद उठाते हुए कॉल किया कि धारकों में से एक जो दो विधि कॉलों में से एक में अलग हो गया था, फिर से अलग होने के लिए कह रहा है।

IllegalArgumentException: called detach on an already detached child ViewHolder

इसके विपरीत मैं केवल एक पर्यवेक्षक को notifyDataSetChanged पर कॉल नहीं कर सकता क्योंकि मुझे नहीं पता कि रूम द्वारा पहले किसे बुलाया जाएगा।

अब मुझे नहीं पता कि क्या करना है और इन दो डेटा स्रोतों के बीच एक ही रीसाइक्लर दृश्य में संबंध कैसे बनाए रखना है, दो दिनों की सोच के बाद मैं किसी भी सुझाव या सलाह को सुनने के लिए पूरी तरह से तैयार हूं और इसे आवेदन के रूप में लागू करने के लिए तैयार हूं संभव के रूप में साफ कोडित

0
Omar Shawky 22 सितंबर 2021, 20:50

1 उत्तर

सबसे बढ़िया उत्तर

इस प्रश्न का उत्तर मेरे अन्य संबंधित प्रश्न और इसके उत्तर

निश्चित रूप से जब तक कोई दूसरा अच्छा समाधान प्रदान नहीं करता है, तब भी मैं सुझावों के लिए खुला हूं, लेकिन अगर किसी ने भविष्य में मेरे प्रश्नों को देखा तो मैंने अपनी समस्याओं को हल करने के लिए जो किया वह पोस्ट करना चाहता था।

0
Omar Shawky 25 सितंबर 2021, 01:51
1
स्रोतों को एक LiveData में संयोजित करने का आपका समाधान सही है।
 – 
Minas Mina
6 अक्टूबर 2021, 18:55