Mam widget na Androida, który pobiera dane z serwera co 10 minut i wyświetla je na ekranie.
Chciałbym dodać do tego widżetu przycisk "Odśwież".
Gdy użytkownik kliknie ten przycisk, chciałbym uruchomić metodę pobierającą informacje z serwera.
Dodawanie obsługi zdarzeń do przycisku w aplikacji jest bardzo proste, ale nie mogłem znaleźć przykładu widżetu.
Chciałbym uzyskać pomoc dotyczącą dodawania funkcji do kliknięcia przycisku w widgecie.Zdarzenie kliknięcia przycisku dla widgetu Android
Odpowiedz
dowiedziałem się, jak to zrobić.
dodać akcję do pliku AndroidManifest.xml
w tagu><receiver><intent-filter>
:
<action android:name="MY_PACKAGE_NAME.WIDGET_BUTTON" />
W dostawcy dodać stałą, która odpowiada nazwie Działanie:
public static String WIDGET_BUTTON = "MY_PACKAGE_NAME.WIDGET_BUTTON";
W metodzie onUpdate()
doda intencję, że pasuje do akcji:
Intent intent = new Intent(WIDGET_BUTTON);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.MY_BUTTON_ID, pendingIntent);
Wreszcie, w metodzie onRecieve() sprawdź nazwę akcji :
if (WIDGET_BUTTON.equals(intent.getAction())) {
//your code here
}
Dziękuję bardzo! –
Dzięki @Sharon Haim Pour! –
Myślę, że warto zauważyć, że możesz (i prawdopodobnie powinieneś) użyć wyraźnej intencji zamiast domyślnej intencji. Oznacza to, że nie musisz definiować akcji w manifeście i że powinieneś stworzyć takie intencje jak: Intent intent = new Intent (context, MyClass.class); – user936580
protected PendingIntent getPendingSelfIntent(Context context, String action) {
Intent intent = new Intent(context, getClass());
intent.setAction(action);
return PendingIntent.getBroadcast(context, 0, intent, 0);
}
views.setOnClickPendingIntent(R.id.Timm, getPendingSelfIntent(context,
"ham"));
preferują także adres URL:
How to correctly handle click events on Widget
Jeśli rozwiązać go w inny sposób, proszę podać to jako odpowiedź
Nie rozumiem, gdzie umieścić ten kod. Gdzie wywołujesz funkcję w kliknięciu? –
Oto przykład bardziej, że powinno pomóc:
package com.automatic.widget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class Widget extends AppWidgetProvider {
private static final String SYNC_CLICKED = "automaticWidgetSyncButtonClick";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews;
ComponentName watchWidget;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
watchWidget = new ComponentName(context, Widget.class);
remoteViews.setOnClickPendingIntent(R.id.sync_button, getPendingSelfIntent(context, SYNC_CLICKED));
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
if (SYNC_CLICKED.equals(intent.getAction())) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews;
ComponentName watchWidget;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
watchWidget = new ComponentName(context, Widget.class);
remoteViews.setTextViewText(R.id.sync_button, "TESTING");
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
}
protected PendingIntent getPendingSelfIntent(Context context, String action) {
Intent intent = new Intent(context, getClass());
intent.setAction(action);
return PendingIntent.getBroadcast(context, 0, intent, 0);
}
}
Dzięki za tak dobry przykład Używam tego kodu i mojej aplikacji Praca w porządku ... Thnks a Lot –
Dziękuję za tonę, ta odpowiedź pomogła mi. =) –
Ten kod działał bez zamieszania inne przykłady przedstawione - jest to doskonały, zwięzły przykład informacji przewodnika dev - dzięki! – headscratch
Oto kolejna odpowiedź z następujących świadczeń:
- Obsługuje wszystkie instancje App Widget (użytkownik może mieć wiele instancji widgetu w różnych konfiguracjach/rozmiarach na ekranie). Kodowanie dla wszystkich wystąpień jest zgodne z oficjalną dokumentacją. Zobacz Guide > App Widgets > Using the AppWidgetProvider Class, przewiń w dół do przykładu kodu "ExampleAppWidgetProvider".
- Kod roboczy w
onReceive
w wywołaniach wywołańonUpdate
(w ten sposób zmniejsza się duplikowanie kodu). - Kod w
onUpdate(Context context)
jest uogólniony, aby można go było umieścić w dowolnej podklasie AppWidgetProvider.
Kod:
public class MyWidget extends AppWidgetProvider {
private static final String ACTION_UPDATE_CLICK =
"com.example.myapp.action.UPDATE_CLICK";
private static int mCount = 0;
private static String getMessage() {
return String.valueOf(mCount++);
}
private PendingIntent getPendingSelfIntent(Context context, String action) {
// An explicit intent directed at the current class (the "self").
Intent intent = new Intent(context, getClass());
intent.setAction(action);
return PendingIntent.getBroadcast(context, 0, intent, 0);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
String message = getMessage();
// Loop for every App Widget instance that belongs to this provider.
// Noting, that is, a user might have multiple instances of the same
// widget on
// their home screen.
for (int appWidgetID : appWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.my_widget);
remoteViews.setTextViewText(R.id.textView_output, message);
remoteViews.setOnClickPendingIntent(R.id.button_update,
getPendingSelfIntent(context,
ACTION_UPDATE_CLICK)
);
appWidgetManager.updateAppWidget(appWidgetID, remoteViews);
}
}
/**
* A general technique for calling the onUpdate method,
* requiring only the context parameter.
*
* @author John Bentley, based on Android-er code.
* @see <a href="http://android-er.blogspot.com
* .au/2010/10/update-widget-in-onreceive-method.html">
* Android-er > 2010-10-19 > Update Widget in onReceive() method</a>
*/
private void onUpdate(Context context) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance
(context);
// Uses getClass().getName() rather than MyWidget.class.getName() for
// portability into any App Widget Provider Class
ComponentName thisAppWidgetComponentName =
new ComponentName(context.getPackageName(),getClass().getName()
);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(
thisAppWidgetComponentName);
onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (ACTION_UPDATE_CLICK.equals(intent.getAction())) {
onUpdate(context);
}
}
}
Widget wygląda to
ten buduje na getPendingSelfIntent
pracy @Kels, @SharonHaimPour i @ Erti-ChrisEelmaa.
To także opiera się na Android-er > 2010-10-19 > Update Widget in onReceive() method (nie ja), gdzie pokazano, jak wywołać onUpdate z onReceive, na podstawie instancji aplikacji. Tworzę ten kod ogólny i zawijam go w callOnUpdate
.
- 1. Czynność kliknięcia przycisku w systemie Android?
- 2. Zdarzenie kliknięcia przejścia CSS3
- 3. Wybierz i wywołaj zdarzenie kliknięcia przycisku radiowego w jquery
- 4. Zdarzenie kliknięcia jQuery na przycisku radiowym nie jest uruchamiane
- 5. Zdarzenie kliknięcia przycisku jest wyzwalane przy przesyłaniu formularza z wpisem
- 6. Zdarzenie kliknięcia przycisku obrazu obrazu z JQuery Mobile
- 7. Jak ustawić zdarzenie kliknięcia dla formularza?
- 8. Obsługa kliknięcia przycisku "Subskrybuj" Facebooka
- 9. Zdarzenie wielokrotnego kliknięcia JQuery?
- 10. Zdarzenie kliknięcia dla elementów dodanych do DOM dynamicznie
- 11. Dodawanie zdarzenia kliknięcia dla przycisku utworzonego dynamicznie za pomocą jQuery
- 12. Zwiększenie powierzchni kliknięcia przycisku
- 13. Zdarzenie kliknięcia przycisku AppWidget w systemie Android nie zostało odebrane po zatrzymaniu startera domowego.
- 14. jak wywołać zdarzenie kliknięcia pliku wejściowego z kliknięcia przycisku w kancie 2?
- 15. Ustaw funkcjonalność przycisku wstecznego widgetu wyszukiwania
- 16. Aktualizacja widgetu Android
- 17. Zdarzenie wyzwalające dla kliknięcia nadrzędnego, ale nie dla dzieci
- 18. Jak ustawić stan kliknięcia dla mojego przycisku niestandardowego?
- 19. Jak wyłączyć zdarzenie kliknięcia znacznika?
- 20. Określanie kliknięcia AddAction dla powiadomień systemu Android
- 21. Narzędzie do podwójnego kliknięcia przycisku w Androidzie
- 22. Bootstrap onClick przycisku zdarzenie
- 23. Jak $ _POST bez kliknięcia przycisku?
- 24. UISearchDisplayController - Metoda kliknięcia przycisku anulowania
- 25. Aktualizacja widgetu Android z działania
- 26. Określ zdarzenie dwukrotnego kliknięcia dla formantu w Visual Studio Designer
- 27. Zdarzenie kliknięcia wyzwalacza z dyrektywy angularjs
- 28. Zdarzenie najechania i kliknięcia na urządzeniach mobilnych
- 29. jak przerwać zdarzenie dwukrotnego kliknięcia w datagridview?
- 30. Zdarzenie kliknięcia FrameLayout nie uruchamia się
To jest pomocne http://stackoverflow.com/a/8635715/2015318 – StarsSky