Reputation: 5126
I am getting an error "Problem loading widget". I tried to create a widget that simply flips the number values 1 and 2. But its not getting loaded. Also, my logcat is empty so cannot figure out the problem. I tried cleaning the project, reinstalling widget but still the same problem.
Here is my DemoUI.java
package com.example.widget2;
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.os.Bundle;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;
public class DemoUI extends AppWidgetProvider {
public static String MY_WIDGET_UPDATE="ACTION_BUTTON1";
RemoteViews remoteViews;
@Override
public void onReceive(Context context, Intent intent){
super.onReceive(context, intent);
if(intent.getAction().equals(MY_WIDGET_UPDATE)){
Bundle b = intent.getExtras();
if(b != null) {
int num = (Integer) b.get("num");
Toast.makeText(context, num, Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int []appWidgetIds){
int num=1;
ComponentName comp=new ComponentName(context,DemoUI.class);
int []allWidgetIds=appWidgetManager.getAppWidgetIds(comp);
for(int widgetIds:allWidgetIds){
//num=(num+1)%3;
num++;
remoteViews=new RemoteViews(context.getPackageName(),R.layout.main);
Log.w("WidgetExample2",String.valueOf(num));
remoteViews.setTextViewText(R.id.text1, String.valueOf(num));
//register listener
Intent intent=new Intent(context,DemoUI.class);
//intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.setAction(MY_WIDGET_UPDATE);
//intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
intent.putExtra("num", num++);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent);
//committing changes to the widget
appWidgetManager.updateAppWidget(widgetIds, remoteViews);
}
}
}
//My manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.widget2"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name="com.example.widget2.DemoUI">
<intent-filter >
<action
android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/info"/>
</receiver>
</application>
</manifest>
//main.xml inside layout folder
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<View
android:layout_width="1dp"
android:layout_height="30dp"/>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/someText"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/refresh"
android:layout_gravity="center"
android:onClick="showText"
/>
<CheckBox
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/update"
android:layout_gravity="center"
android:onClick="UpdateAutomatically"
/>
</LinearLayout>
//info.xml inside xml folder
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/main"
android:minWidth="146dp"
android:minHeight="72dp"
android:updatePeriodMillis="300000"
>
</appwidget-provider>
Upvotes: 0
Views: 1434
Reputation: 21183
Two things:
Views
to app widgetsCheckbox
es are not supported by RemoteViews
Remove them from your layout and you should be set.
Also, you may want to remove android:onClick
. I am not sure if that'd cause loading error, but it is definitely useless in RemoteViews
.
Upvotes: 2