2011-01-01 13 views
12
उत्तर नहीं दे रहे

संभव डुप्लिकेट:
After orientation change buttons on a widget are not respondingएक विजेट पर उन्मुखीकरण परिवर्तन बटन के बाद

मैं एक appwidget XML लेआउट के अंदर एक imageView है कि के साथ एक समस्या का सामना करना पड़ रहा है, जिसके लिए मैं एक लंबित पंजीकरण पंजीकृत करता हूं जिसे ऑनरसीव विधि में संभाला जाता है। सब कुछ ठीक काम करता है जब तक कि मैं फोन अभिविन्यास बदल नहीं जाता। इस बिंदु पर विजेट अब और काम नहीं करता है, मैं छवि पर क्लिक करता हूं लेकिन नोटिंग होता है। After orientation change buttons on a widget are not responding

समस्या क्या है और कैसे सुलझाया जा सकता है: यह समस्या ठीक एक यहाँ के रूप में है? धन्यवाद।

+0

हाय, मैं इस समस्या आप लिंक आप पोस्ट में पहचान की है जवाब दे दिया। जब आप स्क्रीन को घुमाते हैं तो यह विजेट को फिर से बनाया जा सकता है। जब विजेट पुन: बनाया जाता है, तो आपको क्लिक हैंडलर पर क्लिक करना होगा - यानी। लंबित क्लिक घटनाओं को दोबारा संलग्न करें। यही कारण है कि सेवा इस परिदृश्य के लिए अच्छी तरह से काम करता है। यह ऑन कॉन्फिगरेशन चेंजेड इवेंट को कैप्चर करता है और हैंडलर को यूई घटकों में पुनर्निर्मित करता है। – jagsaund

+1

धन्यवाद, किसी सेवा की सहायता के बिना हल किया गया है, बस ऑनऑसिव विधि में setOnClickPendingIntent को फिर से सेट करें। – Alex

+1

क्या आप हमें बता सकते हैं कि अभिविन्यास परिवर्तन के लिए आपको किस तरह से प्राप्त किया जा सकता है? मुझे एक ही समस्या है, लेकिन इस ऐप के लिए मेरा AppWidgetProvider.onReceive() नहीं बुलाया जा रहा है। –

उत्तर

9

अंततः मैं ओपी के सेवा मुक्त समाधान को फिर से बनाने में कामयाब रहा। रिकॉर्ड के लिए यहां रहस्य है: जब भी आप दूरस्थ दृश्य अपडेट करते हैं, तो आपको जो भी अपडेट हो, उसे अपडेट करना होगा। मेरा ऐप कुछ दृश्य तत्व अपडेट कर रहा था, लेकिन बटन हैंडलर को दोबारा सेट नहीं कर रहा था। इससे हैंडलर काम करना बंद कर देता है - सीधे नहीं - केवल घूर्णन परिवर्तन के बाद, भ्रम।

यदि यह सही हो गया है, तो आपको कॉन्फ़िगरेशन परिवर्तन प्रसारण को अवरुद्ध करने की आवश्यकता नहीं है, आपके द्वारा सेट किए गए अंतिम रिमोट व्यू का उपयोग रोटेशन के बाद फिर से किया जाएगा। आपके AppWidgetProvider को कोई कॉल की आवश्यकता नहीं है।

0

एक संभावित व्याख्या के लिए यहाँ देखें, या आगे तुएं:

http://permalink.gmane.org/gmane.comp.handhelds.android.devel/98008

या

http://groups.google.com/group/android-developers/browse_thread/thread/578a4429c369c27c/273a53a96ddd10c5?lnk=gst&q=Widget+does+not+respond+when+phone+orientation+changes#273a53a96ddd10c5

लेकिन यह अभी तक स्पष्ट नहीं है कि क्या सच समाधान है।

2

मैं ने वही समस्या थी, लेकिन मेरे ऐप, "समाधान एलेक्स

ने सुझाव दिया ... सेवा की सहायता के बिना हल के साथ अब अच्छी तरह से काम कर रहा है बस फिर OnReceive में setOnClickPendingIntent की स्थापना विधि "

मैंने ऑनसेसिव विधि को ट्रैक किया और इसे हर बार कहा जाता है कि मैं अपने डिवाइस का अभिविन्यास बदलता हूं, इसलिए मैंने फिर से अपने विजेट की कॉन्फ़िगरिव विधि पर कॉन्फ़िगरेशन को कॉन्फ़िगर किया।

वैसे भी मुझे यकीन नहीं है कि यह समस्या हल करने का सबसे अच्छा समाधान है, अगर कोई बेहतर समाधान जानता है तो कृपया साझा करें।

धन्यवाद।

1

जब भी आप अपने विजेट (या तो एक गतिविधि या अपने ब्रॉडकास्ट रिसीवर [ऐप विजेट प्रदाता] का उपयोग करके) को अपडेट करते हैं, तो आपको क्लिक हैंडलर के लिए सभी लंबित संकेतों को फिर से सौंपना होगा, और फिर सामान्य के रूप में updateAppWidget() पर कॉल करना होगा।setTextViewText() साथ

उदाहरण:

// This will update the Widget, but cause it to 
// stop working after an orientation change. 
updateWidget() 
{ 
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget"); 

appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 
} 


// This is the correct way to update the Widget, 
// so that it works after orientation change. 
updateWidget() 
{ 
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget"); 

Intent intent = new Intent(context, MyWidgetActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, ...); 
remoteViews.setOnClickPendingIntent(R.id.widget_click_button, pendingIntent); 

appWidgetManager.updateAppWidget(appWidgetId, remoteViews); 
}