2011-10-27 2 views
0

Je fais un widget simple pour la première fois et il semble que le tutoriel que j'utilise a quelque chose manquant parce que mon LogCat indique "Erreur gonfler AppWidget" lorsque je le sélectionne dans la liste des widgets.Erreur gonflement AppWidget

Selon le tutoriel, je les ai fait.

mise en page:

<TextView android:id="@+id/widget_textview" android:text="@string/widget_text" 
    android:layout_height="wrap_content" android:layout_width="wrap_content" 
    android:layout_gravity="center_horizontal|center" 
    android:layout_marginTop="5dip" android:padding="10dip" 
    android:textColor="@android:color/black" /> 
</LinearLayout> 

Classe:

package hello.widget; 

import android.appwidget.AppWidgetProvider; 

public class HelloWidget extends AppWidgetProvider { 
} 

Cordes:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">Hello Widget</string> 
    <string name="widget_text">Hello Widget!</string> 
</resources> 

Fournisseur Widget:

<?xml version="1.0" encoding="utf-8"?> 
appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"> 
    android:minWidth="146dip" 
    android:minHeight="72dip" 
    android:updatePeriodMillis="10000" 
    android:initialLayout="@layout/main" 
</appwidget-provider> 

Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="hello.widget" android:versionCode="1" android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="3" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

    <!-- Broadcast Receiver that will process AppWidget updates --> 
    <receiver android:name="hello.widget.HelloWidget" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data android:name="android.appwidget.provider" 
      android:resource="@xml/hello_widget_provider" /> 
    </receiver> 

    </application> 
</manifest> 

Répondre

1

Il vous manque l'ouverture <LinearLayout> dans votre fichier de mise en page. Ce que vous avez ici ne devrait même pas compiler.

L'implémentation complète de votre AppWidgetProvider vous manque également. Vous devez implémenter onUpdate() pour spécifier ce que le widget d'application doit afficher.

En outre, votre updatePeriodMillis est plus court que celui autorisé - vous ne pouvez pas mettre à jour un widget d'application toutes les 10 secondes de cette façon.

De même, assurez-vous que votre mise en page est nommée main.xml ou mettez à jour votre android:initialLayout pour refléter le nom correct de la mise en page.

+0

Salut, Merci pour l'aide. C'est opérationnel maintenant. –

1

Ma solution:

public void onReceive(Context context, Intent intent) 
{ 
    String action = intent.getAction(); 

    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) 
    { 
     long days = (((calendar.getTimeInMillis()- date1.getTime())/1000))/86400; 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

     //Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.android.alarmclock", "com.android.alarmclock.AlarmClock")); 
     // PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, AlarmClockIntent, 0); 
     Intent Date_Change= new Intent(Intent.ACTION_DATE_CHANGED); 
     PendingIntent pendingIntent2=PendingIntent.getActivity(context,0, Date_Change, 0); 

     views.setOnClickPendingIntent(R.id.textView1, pendingIntent2); 
     views.setTextViewText(R.id.textView1,""+days); 

     //views.setOnClickPendingIntent(R.id.AnalogClock, pendingIntent); 

     //AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views); 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
     ComponentName thisWidget = new ComponentName(context, Widget.class); 
     appWidgetManager.updateAppWidget(thisWidget, views); 
    } 
} 
+0

Merci pour l'exemple de code. :-) –

Questions connexes