2010-06-20 19 views
7

मेरे पास कोड के साथ एक अजीब बग है जिसमें मैंने कोड किया है- स्क्रीन घुमाने के बाद विजेट ऑनक्लिक घटनाओं पर प्रतिक्रिया देना बंद कर देता है। कोड ऐप विजेट here के लिए एंड्रॉइड डेवलपर दस्तावेज़ में बिल्कुल वैसा ही है। मैंने देखा है कि बाजार से अन्य विजेट्स में यह समस्या नहीं है- क्या शायद कोई ज्ञात कामकाज है? मैंने घूर्णन के बाद पूरे स्थान पर टैप करने का प्रयास किया है, इसलिए मुझे नहीं लगता कि यह ऑनक्लिकपेंडइन्टेंट को रोटेशन के बाद आकार में नहीं बदला जा रहा है; यह बिल्कुल उपस्थित नहीं प्रतीत होता है।ऑटो स्क्रीन रोटेशन विजेट रिमोट व्यू ऑनक्लिक ईवेंट

AppWidgetProvider एक रोटेशन तो मैं काफी अनिश्चित आगे बढ़ने के लिए कैसे कर रहा हूँ की स्थिति में सुनने के कोड को फिर से करना के लिए मैं एक onRotation() ट्रिगर की तरह नहीं मिल सकता है ...

धन्यवाद!

उत्तर

3

मुझे Google समूह पर किए गए एक पोस्ट से निम्नलिखित प्रतिक्रिया मिली जिसने मेरी समस्या का समाधान किया। मैं यह नहीं कह सकता कि यह मूल पोस्टर की समस्या का समाधान करेगा, लेकिन अगर मैं इसे किसी अन्य समस्या के दौरान चलाता हूं तो मैं इसे पोस्ट करूंगा। मेरी Google समूह पोस्ट करने के लिए लिंक है:

http://groups.google.com/group/android-developers/browse_thread/thread/ca8c2958b6dc086c#


वहाँ विन्यास बदलाव पर कोई onUpdate है। होम स्क्रीन आपके विजेट को दोबारा शुरू करती है, फिर सबसे हालिया रिमोट व्यू लेती है और इसे विजेट पर लागू करती है।

मुझे लगा कि यह रोटेशन पर विजेट को पुनर्निर्माण कर रहा था। समस्या है, मुझे लगता है कि मुझे उस प्रभाव पर कोई संदेश नहीं मिल रहा है, और कनेक्शन को दोबारा स्थापित करने का कोई तरीका नहीं है (जिसे मैं देख सकता हूं)। मैं कैसे निर्धारित कर सकता हूं कि एक घुमाव हुआ है और एक नया ऑनक्लिक कनेक्शन स्थापित कर सकता है?

जैसा कि मैंने कहा था, आप (अभिविन्यास परिवर्तन को निर्धारित या प्रतिक्रिया नहीं देते)।

आप करते क्या, सभी मामलों में यह सुनिश्चित करें कि हर बार अपने कोड धक्का अपने विजेट के लिए घर अनुप्रयोग में एक RemoteViews वस्तु, यह पूरा हो बनाने है:

  • छवि संसाधन आईडी है;
  • टेक्स्ट डंक है;
  • इरादे लंबित है।

"वृद्धिशील" विजेट अद्यतन करना मत करो, जैसे आप एक नियमित गतिविधि के साथ क्या करना होगा - पहली छवियों, तो पाठ वर्तमान जानकारी दर्शाती उद्देश्य निर्धारित नहीं करते हैं, तो।

घर ऐप एक अलग प्रक्रिया के रूप में चलता है, और इसका राज्य आपके विजेट रिसीवर के साथ से बाहर निकल सकता है। जब ऐसा होता है, तो के लिए केवल एक चीज है जो आपके विजेट को फिर से बना रही है, यह सबसे हालिया रिमोट व्यू ऑब्जेक्ट है। यदि यह पूर्ण है, और इसमें सभी भाग हैं, तो सब कुछ ठीक काम करेगा। यदि यह केवल में सबसे हालिया टेक्स्ट या छवि परिवर्तन है, तो पहले के अपडेट जिनमें इरादे खो जाएंगे।

http://kmansoft.wordpress.com/2010/05/23/widgets-and-orientation-chan ...

- Kostya

0

निम्नलिखित कोड समस्या को हल करने में सक्षम होने की तरह लगता है।

@Override 
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { 
    super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions); 
    onUpdate(context, appWidgetManager, new int[] {appWidgetId}); 
} 
0

सबसे पहले, सुनिश्चित करें कि आपके RemoteViews विजेट के राज्य के एक पूर्ण प्रतिनिधित्व है अगर आप AppWidgetManager.updateAppWidget() कॉल कर रहे हैं। सभी लंबित इरादों को सेट करें, डेटा देखें, इत्यादि। लॉन्चर आपके विजेट को राज्य से पुनर्स्थापित करना चाहता है, उदाहरण के लिए इस स्थिति का फिर से उपयोग किया जाएगा। जब घूर्णन बदलता है।

जब आप अपने रिमोट व्यू को अपडेट करना चाहते हैं लेकिन आप एक पूर्ण रिमोट व्यू प्रतिनिधित्व, यानी नहीं चाहते हैं। आप बस मौजूदा रिमोट व्यू स्टेटस को बदलना चाहते हैं, तो आप AppWidgetManager.partiallyUpdateAppWidget() का उपयोग कर सकते हैं।

यह अद्यतन updateAppWidget कि में (int, RemoteViews) RemoteViews वस्तु जो पारित हो जाता है विजेट की एक अधूरी प्रतिनिधित्व समझा जाता है, और इसलिए AppWidgetService द्वारा कैश नहीं है से अलग है। ध्यान दें कि इन अद्यतनों को कैश नहीं किया गया है, इसलिए कोई भी यह बताता है कि वे पुनर्स्थापित करते हैं जो पुनर्स्थापित द्वारा पुनर्स्थापित नहीं किया जाता है। इंस्टेंसस्टेट इस स्थिति में जारी नहीं रहेगा कि विजेट को कैश संस्करण को AppWidgetService में उपयोग करके पुनर्स्थापित किया जाएगा। रिमोट व्यू .शोनेक्स्ट (int), रिमोट व्यू। शो पूर्व (int), रिमोट व्यू .सेटस्क्रोलपोजिशन (int, int) और इसी तरह के कमांड के साथ उपयोग करें।

उदाहरण के लिए, जब एक विजेट onUpdate के बाहर के लिए एक ViewPager को आगे बढ़ाने:

final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.app_widget_4x2); 
remoteViews.showNext(R.id.appWidget_viewFlipper); 
appWidgetManager.partiallyUpdateAppWidget(widgetId, remoteViews); 
संबंधित मुद्दे