繁体   English   中英

如何在执行小部件操作之前检查值是否已更改

How To Check If Value Changed Before Performing a Widget Action

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在学习如何创建窗口小部件,但目前仍处于停滞状态。 我有一个小部件,其中包含一个按钮,单击该按钮将启动一个活动。 但是可能会启动两个活动,这取决于布尔值。 如果当前Activity为MainActivity,则布尔值为true;否则为false。 但是单击按钮时,此处的布尔值似乎没有更新为新值。 难道我做错了什么。 任何帮助将不胜感激。

public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds)
    {

        final int N = appWidgetIds.length;

        for (int i = 0; i < N; i++)
        {
            final  int appWidgetId = appWidgetIds[i];
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.rz_widget_layout);

            Intent intent=null;


            if(MainActivity.WidgetAppLuancherChecker){intent= new Intent(context, MainActivity.class);}
            else{intent= new Intent(context, ActivityB.class);}

            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
            views.setOnClickPendingIntent(R.id.LaunchApp, pendingIntent);

            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }

表现

 <receiver android:name="com.AppWidget.ApWidgetProvider" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/info_widget_layout" />
        </receiver>
3 个回复
public static boolean getLock(Context context) {
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
            boolean lock = prefs.getBoolean("lock", true);
            return lock;
        }

public static void setLock(Context context, boolean isMainActivity) {

            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

            SharedPreferences.Editor editor = prefs.edit();
            editor.putBoolean("lock", isMainActivity);
            editor.commit();
        }

使用SharedPreference。 您可以尝试在MainActivity中实现这两种方法。 将Lock方法设置为true或false可以更改您的布尔变量。 然后在窗口小部件中的下一次单击将打开第二个类。

if(MainActivity.getLock(context)){intent= new Intent(context, MainActivity.class);}
            else{intent= new Intent(context, ActivityB.class);}

编辑:您可以在SharedPreferences中设置布尔变量后更新小部件。

 private void updateWidgetScreen(String updateData) {

        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
        RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget);
        ComponentName thisWidget = new ComponentName(this, WidgetProvider.class);
        remoteViews.setTextViewText(R.id.currency, " Dollar");

        Intent intent = new Intent(this, WidgetService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, MainUtils.getWidgetID(prefs));
        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        remoteViews.setRemoteAdapter(MainUtils.getWidgetID(prefs), R.id.list_view, intent);

        Intent clickIntent = new Intent(this, MainActivity.class);
        PendingIntent clickPI = PendingIntent.getActivity(this, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        remoteViews.setPendingIntentTemplate(R.id.list_view, clickPI);
        appWidgetManager.updateAppWidget(thisWidget, remoteViews);

    }

试试这个我认为这将对你有用:: 这里

使用来自活动/服务/接收者的程序化更新小部件找到了解决方案

当我在活动中更改布尔值时,应调用以下命令:

Intent intent = new Intent(activity,ApWidgetProvider.class);
        intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        int ids[] = AppWidgetManager.getInstance(activity.getApplication()).getAppWidgetIds(new ComponentName(activity.getApplication(), ApWidgetProvider.class));
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
        activity.sendBroadcast(intent);

onUpdate方法:

public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds)
    {

        final int N = appWidgetIds.length;

        for (int i = 0; i < N; i++)
        {
            final  int appWidgetId = appWidgetIds[i];
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.rz_widget_layout);

            Intent intent=null;

            int j=0;
            if(MainActivity.WidgetAppLuancherChecker){j=1;intent= new Intent(context, MainActivity.class);}
            else{j=2;intent= new Intent(context, ActivityB.class);}

            PendingIntent pendingIntent = PendingIntent.getActivity(context,j,intent,PendingIntent.FLAG_UPDATE_CURRENT);
            views.setOnClickPendingIntent(R.id.RelativeWidget, pendingIntent);

            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
1 是否可以在执行其他操作之前检查字段是否已更改?

我要完成的工作是在SharePoint表单中,如果选择“ Choice1”,则在“选择”字段中,在“保存”上发送一封电子邮件,如果选择“ Choice2”,则发送另一封电子邮件。 我已经完成了这部分。 我面临的挑战是,每次保存表单时(即使更改了其他选项卡上的内容,或者根本没有任何更改),电子邮件都会 ...

2 如何在执行任何操作之前执行方法(检查用户是否已登录)Struts 2

我想检查(会话)用户是否已登录,因此如果用户尝试访问资源(链接)而他未连接,则必须将其重定向到登录页面,我可以进行此验证 那么 但是我必须在 class action 的每个 method-action 中执行这个方法,我必须在struts.xml上的每个 action 中处理结果。 所以 ...

3 在执行任何操作之前,请检查文件是否已打开

我创建了一个脚本,用于根据某些条件重命名文件夹中的文件。 我正在尝试使用try,除了在执行任何重命名之前先查看文件是否打开。 截至目前,如果文件已打开,则程序将显示“错误”消息并重命名文件,但会将原始文件的副本保留在目录中。 我希望有一种方法可以在开始重命名过程之前检查是否打开了任何 ...

2014-04-24 15:34:32 1 1120   python
5 如何对tkinter Scale小部件的某些值执行操作?

我正在使用Python中的Tkinter,但Scale小部件存在问题。 我想要做的是对“比例”的某些值执行的操作。 这是Scale代码的一部分: 发生了一些奇怪的事情,当我运行脚本时,小数位值仍然是0,但条件似乎是正确的,并显示“值是十”。 同样,当我更改比例的值时,即使该值大 ...

6 android小部件上的PendingIntent操作在执行后而不是之前更新变量?

我正在尝试在Android中创建一个简单的小部件,以在按下按钮后设置一个小时的闹钟。 FLAG_CANCEL_CURRENT无法按我预期的方式工作,它会使用已缓存的先前整数值创建一个警报,然后对其进行更新,因此除非我删除警报并再次按下按钮,否则无法获得正确的警报时间设置。 这里正确的方 ...

8 在删除之前检查tkinter中是否存在小部件

我正在使用下拉菜单创建几个小部件。 我想在删除之前检查小部件是否存在(来自下拉菜单上的先前选择)。 我使用以下代码: 但是,如果尚未创建窗口小部件,则会出现属性错误: 理想情况下,我希望if语句在小部件存在时返回1如果不存在则返回0 ,这就是我认为的.winfo_exists ...

9 如何在Android中使用Imagebuttons小部件执行操作

我创建了一个简单的应用程序,其中一个活动中有3个Imagebutton。 这些按钮正在执行某些操作。 此外,我想在具有3个按钮的主屏幕上创建一个小部件,该小部件执行与活动中的imageButtons相同的操作。 我已经阅读了许多教程,但是找不到合适的教程。 小部件如下所示: ...

10 当其他小部件的值更改时,是否更改GWT flex表内的小部件的值?

好的,因为我是GWT新手,所以我有一个非常具体且非常复杂的问题。 我有一个GWT flex表,用于动态添加行,其单元格包含GWT小部件。 行号发生变化,但静态列数始终为6。每行包含一个带有“删除”按钮的单元格和五个分别具有自己的文本框的单元格。 我需要做的是以某种方式在一行的单元格 ...

2016-10-27 11:18:51 1 348   gwt
暂无
暂无

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

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