2011-05-06 14 views
5

Leí el tutorial hellowidget y los widgets de la aplicación Dev Guide. Entonces sé cómo crear un widget que contenga un botón o texto o algo.¿Cómo compartir datos entre la actividad y el widget?

Pero lo que realmente quiero hacer es hacerlo interactuar con mi aplicación. Por ejemplo, quiero crear un widget que tenga una vista de texto, y cuando hago clic en él, envía un PendingIntent a mi actividad en el que puedo editar el texto.

Puedo hacer el paso "envía un PendingIntent". Pero después de editar el texto en acción, ¿cómo lo lee el widget?

Respuesta

1

Tienes que usar la clase RemoteViews para hacerlo. Crear una instancia de la clase RemoteViews dentro de su método OnRefresh AppWidgetProvider y utilizar los métodos en los que ...

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

Tenga en cuenta que RemoteViews está limitada en funcionalidad en comparación con las vistas estándar de aplicaciones. Pero, puede lograr lo que quería hacer con lo que ofrecen.

+0

PUEDO hacer el paso "envía un PendingIntent". Lo que respondiste es este paso. –

+0

Oops ok ... Entonces, debe transmitir otra intención de su actividad para la cual su widget pueda escuchar. Tener los datos en la intención que puede usar el widget para actualizarse. –

8

Lo que hay que hacer es registrar una intención personalizado, por ejemplo ACTION_TEXT_CHANGED en su AppWidgetProvider así por ejemplo:

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

Después de esto, debe registrar en su AndroidManifest.xml que desea recibir esta intentos en la sección de filtro intención de su etiqueta receptor de la siguiente manera:

<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> 

entonces usted tiene que extender el método OnReceive en su AppWidgetProvider y asegúrese de que usted está manejando su intención como esto:

@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"); 
    } 
} 

Después de todo lo anterior se configura, sólo tiene que transmitir la intención de su actividad después de que el texto ha cambiado la siguiente manera:

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

Donde "newString" debería cambiarse por el nombre que para dar la cadena.

Espero que ayude.

+0

me puede ayudar Estoy teniendo problemas para pasar mis datos de mi widget a mi actividad aquí es mío: http://stackoverflow.com/questions/39587137/how-to-pass-data-and-open-an-activity -from-widget-android Gracias. – natsumiyu

Cuestiones relacionadas