gpt4 book ai didi

安卓小工具 : Defining a simple boolean variable for a toggle widget

转载 作者:太空狗 更新时间:2023-10-29 12:56:52 29 4
gpt4 key购买 nike

我正在尝试制作一个非常简单的拨动开关,我想存储开关的状态以便在状态之间切换。我目前的解决方案是使用类 bool 变量,但该变量似乎并没有改变。

下面是源代码。如您所见,到目前为止它非常简单并且触摸事件正在工作(即,Log 语句每次都在启动)。当小部件首次放置在屏幕上时,它有文本“Hello!”。第一次按下后,它会变为“Ontrue”,很明显 isEnabled 被设置为 true。然而,在随后的按下操作中,Log 显示 isEnabled 为 false,它继续通过 else 语句而不是 if 执行。

如有任何帮助,我们将不胜感激!

package com.mywidget.widget;

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.util.Log;
import android.widget.RemoteViews;

public class MyWidget extends AppWidgetProvider {
public static final String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";
private RemoteViews remoteViews = new RemoteViews("com.mywidget.widget", R.layout.widget1x1);
private boolean isEnabled;

/** Called when the activity is first created. */
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;

for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];

Intent intent = new Intent(context, MyWidget.class);
intent.setAction(ACTION_WIDGET_RECEIVER);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
intent, 0);

remoteViews.setOnClickPendingIntent(R.id.BTNwidget, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
}

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
Log.i("MyWidget", "Screen pressed! Value is: " + isEnabled);
if (isEnabled) {
// set to off
Log.i("MyWidget", "Setting to off");

// Code to change state
isEnabled = false;

// Update the widget to reflect our changes
remoteViews.setTextViewText(R.id.BTNwidget, "OFF" + isEnabled);
ComponentName cn = new ComponentName(context, HapticWidget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews);
} else {
// set to on
Log.i("MyWidget", "Setting to on");

// Code to change state
isEnabled = true;

// Update the widget to reflect our changes
remoteViews.setTextViewText(R.id.BTNwidget, "ON" + isEnabled);
ComponentName cn = new ComponentName(context, HapticWidget.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews);
}
}
super.onReceive(context, intent);
}
}

最佳答案

AppWidgetProvider 是一个 BroadcastReceiver,因此它的生命周期与 onReceive() 方法一样长。每次触摸时,您的 bool 值都会重新初始化为默认的 false。

您可以尝试将 isEnabled 设置为静态,但您永远不知道运行接收器的进程(和 VM)何时会被杀死(实际上我什至不确定它是否会工作) .所以你最好的机会是使用一些存储,我认为 SharedPreferences 会很好。

关于安卓小工具 : Defining a simple boolean variable for a toggle widget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588197/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com