繁体   English   中英

二次点击Android主屏幕小部件不起作用

[英]Taping an android home-screen widget doesn't work the second time

我是Android的新手(昨天开始:)
我试图用一个TextView制作一个简单的主屏幕小部件,当您点击它时会更改它的值。
事情进展不顺利。 它只有在我轻按3次后才能工作,然后又能工作一次,再也不会工作。 同样,在我第一次“越过”之后,调试器总是崩溃。

表现:

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name">
    <receiver android:name=".GeeDeeBeeDee"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            <action android:name="android.appwidget.action.APPWIDGET_CLICK" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/gee_dee_bee_dee_info" />
    </receiver>
</application>

窗口小部件类:

public class GeeDeeBeeDee extends AppWidgetProvider {

private int DayType = 0;

public static String APPWIDGET_CLICK = "android.appwidget.action.APPWIDGET_CLICK";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
    final int N = appWidgetIds.length;
    for (int i = 0; i < N; i++) {
        updateAppWidget(context, appWidgetManager, appWidgetIds[i]);

接着:

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,int appWidgetId)
{
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.gee_dee_bee_dee);

    Intent intent = new Intent(APPWIDGET_CLICK);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, appWidgetId, intent, 0);
    views.setOnClickPendingIntent(R.id.appwidget_text, pendingIntent );

    appWidgetManager.updateAppWidget(appWidgetId, views);
}

@Override
public void onReceive(Context context, Intent intent)
{
    int widgetId = 0;

    if (APPWIDGET_CLICK.equals(intent.getAction()))
    {

        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.gee_dee_bee_dee);

        if(DayType == 0)
            remoteViews.setTextViewText(R.id.appwidget_text, "0");
        else if(DayType == 1)
            remoteViews.setTextViewText(R.id.appwidget_text, "1");
        else if(DayType == 2)
            remoteViews.setTextViewText(R.id.appwidget_text, "2");

        if(DayType > 2)
            DayType = 0;

        Bundle extras = intent.getExtras();
        if(extras!=null)
        {
            widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
        }

        if(widgetId > 0)
            appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }
    else
        super.onReceive(context, intent);
}

有人可以帮忙吗? 先感谢您。

我相信问题出在您的onUpdate()方法中。 您可能需要检查以下链接: Android:如何在创建时更新小部件文本

希望对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM