2011-05-06 24 views
5

Hellowidget öğreticisini ve Dev Guide 'App Widgets'ını okudum. Ardından düğme veya metin içeren bir widget'ın nasıl oluşturulacağını biliyorum.Etkinlik ve widget arasında veri nasıl paylaşılır?

Ancak gerçekten yapmak istediğim, uygulamanızla etkileşimde bulunmak. Örneğin, bir metin görünümü olan bir widget oluşturmak istiyorum ve tıklattığımda, metni düzenleyebileceğim etkinliğime bir PendingIntent gönderir.

"Bir PendingIntent gönderir" adımını uygulayabilirim. Ancak, metni metinde düzenledikten sonra widget nasıl okunur?

cevap

1

Bunu yapmak için RemoteViews sınıfını kullanmanız gerekir. ... standart uygulama görünümleri ile karşılaştırıldığında RemoteViews işlevselliği sınırlı olduğunu

RemoteViews views = RemoteViews(packageName, layoutId); 
views.setOnClickPendingIntent(viewId, pendingIntent); 

Not sizin AppWidgetProvider en onRefresh yöntemi içinde RemoteViews sınıfının bir örneğini oluşturun ve içine yöntemleri kullanın. Ancak, sağladıkları şeyle ne yapmak istediğinizi başarabilirsiniz.

public static final String ACTION_TEXT_CHANGED = "yourpackage.TEXT_CHANGED"; 

Bundan sonra Almak istediğiniz AndroidManifest.xml kayıt gerekir: Yapmanız Gerekenler

+0

Adım "Bir PendingIntent gönderir." Cevap verdiğiniz şey bu adım. –

+0

Oops tamam ... Ardından, widget'ınızın dinleyebileceği etkinliğinizden başka bir niyet yayınlamanız gerekir. Widget tarafından kendini yenilemek için kullanılabilecek niyetle verileri alın. –

8

örneğin bu gibi AppWidgetProvider içinde ACTION_TEXT_CHANGED örneğin, özel bir niyet kayıt olduğu

<receiver android:name=".DrinkWaterAppWidgetProvider"> 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     <action android:name="yourpackage.TEXT_CHANGED" />     
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
     android:resource="@xml/appwidget_info" /> 
</receiver> 

Sonra AppWidgetProvider içinde OnReceive yöntemi genişletmek ve böyle amacınızı ele emin olun zorunda: Bu gibi alıcı etiketinin niyet filtre bölümünde bu niyetler

@Override 
public void onReceive(Context context, Intent intent) { 
    super.onReceive(context, intent); 
    if (intent.getAction().equals(ACTION_TEXT_CHANGED)) { 
     // handle intent here 
     String s = intent.getStringExtra("NewString"); 
    } 
} 

Sonuçta yukarıdaki metin böyle değişti sonra, sadece aktivitesinde niyet yayın gerekir kurulur: "-dizge" adıyla size değiştirilmesi gerektiğini

Intent intent = new Intent(YourAppWidgetProvider.ACTION_TEXT_CHANGED); 
intent.putExtra("NewString", textView.getText().toString()); 
getApplicationContext().sendBroadcast(intent); 

dizeyi vermek için.

Umarım yardımcı olur.

+0

Verilerimi widget'ımdan etkinliğime iletirken sorun yaşıyorum bana yardımcı olabilir: http://stackoverflow.com/questions/39587137/how-to-pass-data-and-open-an-activity -den-widget-android Teşekkür ederim. – natsumiyu

İlgili konular