tipos studio setsupportactionbar propiedades from example edittext con comunicar change activity java android onclick android-widget

java - studio - setsupportactionbar fragment



Widgets Clickable en Android (1)

Primero, agrega una variable estática con una constante.

public static String YOUR_AWESOME_ACTION = "YourAwesomeAction";

Luego, debe agregar la acción al intento antes de agregar el intento al intento pendiente:

Intent intent = new Intent(context, widget.class); intent.setAction(YOUR_AWESOME_ACTION);

(Donde widget.class es la clase de su AppWidgetProvider, su clase actual)

Luego necesita crear un PendingIntent con getBroadcast

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

Establezca onClickPendingIntent para la vista clicable en su widget

remoteView.setOnClickPendingIntent(R.id.widgetFrameLayout, pendingIntent);

A continuación, anule el método onReceive en la misma clase:

@Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent);

Y luego responda presionando los botones al consultar el intento devuelto por su acción dentro del método onReceive:

if (intent.getAction().equals(YOUR_AWESOME_ACTION)) { //do some really cool stuff here }

¡Y eso debería hacerlo!

La documentación del desarrollador parece haberme fallado aquí. Puedo crear un widget estático sin pensarlo, incluso puedo crear un widget como el widget de reloj analógico que se actualizará a sí mismo, sin embargo, no puedo imaginar cómo crear un widget que reaccione cuando un usuario haga clic en eso. Aquí está el mejor ejemplo de código que la documentación del desarrollador brinda a lo que debe contener una actividad de widget (la única otra sugerencia son las demostraciones de API, que solo crea un widget estático):

public class ExampleAppWidgetProvider extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { final int N = appWidgetIds.length; // Perform this loop procedure for each App Widget that belongs to this provider for (int i=0; i<N; i++) { int appWidgetId = appWidgetIds[i]; // Create an Intent to launch ExampleActivity Intent intent = new Intent(context, ExampleActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); // Get the layout for the App Widget and attach an on-click listener to the button RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout); views.setOnClickPendingIntent(R.id.button, pendingIntent); // Tell the AppWidgetManager to perform an update on the current App Widget appWidgetManager.updateAppWidget(appWidgetId, views); } } }

from: La página de widgets de la documentación del desarrollador de Android

Entonces, parece que se llama intención pendiente cuando se hace clic en el widget, que se basa fuera de un intento (no estoy muy seguro de cuál es la diferencia entre un intento y un intento pendiente), y la intención es para la clase ExampleActivity . Así que hice de mi clase de actividad de muestra una actividad simple que, cuando se creaba, creaba un objeto media player y lo iniciaba (nunca soltaría el objeto, por lo que eventualmente se bloqueó, aquí está su código:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); mp.start(); }

Sin embargo, cuando agregué el widget a la pantalla de inicio y le hice clic, no jugué nada; de hecho, no jugué nada cuando configuré el temporizador de actualización en unos pocos cientos de milisegundos (en el archivo xml del proveedor de appwidget). Además, establecí puntos de quiebre y descubrí que no solo nunca alcanzaba la actividad, sino que ningún punto de quiebre que estableciera se activaría. (Todavía no entiendo por qué), sin embargo, logcat parecía indicar que se estaba ejecutando el archivo de la clase de actividad.

Entonces, ¿hay algo que pueda hacer para que un appwidget responda a un clic? Como el método onClickPendingIntent () es el más cercano que he encontrado a un tipo de método onClick.

Muchas gracias.