1

J'ai 2 mises en page possibles de widget que l'utilisateur peut changer via l'activité de préférence, je veux dire la lumière et l'obscurité. Les deux semblent simillaires, les couleurs onlu sont différentes. Les identifiants d'événement sont les mêmes. Je veux donner la possibilité de cliquer sur tout le widget, ce qui va ouvrir l'activité et envoyer des données nécessaires via l'intention. Mon code dans AppWidgetProvider ne fonctionne pas du tout.Android - Widget cliquez sur l'écouteur ne fonctionne pas

Ici, il est:

private final String ACTION = "CLICK_MY_BUTTON"; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    super.onUpdate(context, appWidgetManager, appWidgetIds); 
    SharedPreferences theme = Data.getPreferences(context, Data.Prefs.THEME); 
    boolean dark = theme.getString(Data.widgetsThemeSetings, "1").equals("1"); 
    int layoutId = dark?R.layout.widget_dark:R.layout.widget_light; 
    for (int i:appWidgetIds) { 
     Intent intent = new Intent(context, MainActivity.class); 
     intent.putExtra("from", "widget"); 
     intent.setAction(ACTION); 
     int id = Calendar.getInstance().get(Calendar.DAY_OF_YEAR); 
     intent.putExtra("id", id<60?id:id-1); 
     intent.putExtra("widgetID", i); 
     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), layoutId); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, intent, 0); 
     remoteViews.setOnClickPendingIntent(R.id.widget_relative_main, pendingIntent); 
     String output = ""; 
     for (String s:HolidayCalendar.getInstance(context).getTodayTexts()) { 
      output += "\n\n" + Data.pointer + " " + s; 
     } 
     remoteViews.setTextViewText(R.id.widget_text_holiday, output.substring(2)); 
     appWidgetManager.updateAppWidget(i, remoteViews); 
    } 
} 

et un de mes mises en page widget:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/widget_relative_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/rounded_widget_dark" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/widget_text_today" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:gravity="center" 
     android:text="@string/today_is" 
     android:textColor="#FFF" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/widget_text_holiday" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/widget_text_today" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:textColor="#FFF" /> 

</RelativeLayout> 

Comment faire fonctionner? Je n'ai aucune idée de ce qui peut être incorrect ...

+0

Souhaitez-vous un événement clickview click? – Rasel

+0

@Rasel Je souhaite un clic à l'ensemble d'un widget – Andret

Répondre

2

c'est mon code de travail. Cela fonctionnera.

for (int i = 0; i < N; i++) { 
      int awID = ids[i]; 

    RemoteViews views = new RemoteViews(getPackageName(), 
         R.layout.widget_layout); 

       Intent intent = new Intent(this, your intented class); 
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

       //views.setTextViewText(R.id.widgetcount, visitstext); 
       PendingIntent pendingIntent = PendingIntent.getActivity(this, 
         0, intent, 0); 

       views.setOnClickPendingIntent(R.id.widgetimage, pendingIntent); 
manager.updateAppWidget(awID, views); 
    } 
+0

Cela a fonctionné pour moi, merci! – Andret