小部件未在主屏幕上加载

时间:2013-05-22 18:28:14

标签: android android-widget

我收到错误“加载小部件时出错”。 我试图创建一个只是翻转数字值1和2的小部件。但它没有加载。此外,我的logcat是空的,所以无法弄清楚问题。 我尝试清理项目,重新安装小部件,但仍然存在同样的问题。

这是我的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);

        }
    }

}

//我的清单

<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

<?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>

// xml文件夹中的info.xml

<?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>

1 个答案:

答案 0 :(得分:2)

两件事:

  • 您无法将Views添加到应用小部件
  • Checkbox 不支持
  • RemoteViews

从布局中删除它们,您应该进行设置。

此外,您可能想要删除android:onClick。我不确定这是否会导致加载错误,但它在RemoteViews中无效。

相关问题