Java 具有切换功能的小部件

Java 具有切换功能的小部件,java,android,android-widget,pseudocode,Java,Android,Android Widget,Pseudocode,我正在尝试创建一个具有一个ImageView的小部件。 我希望它像一个切换按钮一样工作。一次单击,它应该做一件事,另一次单击,它应该做另一件事,然后重复 我在widget上有很多教程,在stackoverflow上也有很多帖子,但到目前为止都没有成功。我想做一些类似的事情:在第一次单击时,启动一个进程,更改ImageView并等待另一次单击停止。我见过这样的小部件 到目前为止,我的代码是: private Boolean clicked = false; ... // Construct t

我正在尝试创建一个具有一个ImageView的小部件。 我希望它像一个切换按钮一样工作。一次单击,它应该做一件事,另一次单击,它应该做另一件事,然后重复

我在widget上有很多教程,在stackoverflow上也有很多帖子,但到目前为止都没有成功。我想做一些类似的事情:在第一次单击时,启动一个进程,更改ImageView并等待另一次单击停止。我见过这样的小部件

到目前为止,我的代码是:

private Boolean clicked = false;

...

// Construct the RemoteViews object
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);

        Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_camera);
        views.setImageViewBitmap(R.id.imageView, bitmap);

        Intent intent1 = new Intent(context, MainActivity.class);
        Intent intent2 = new Intent(context, MainActivity2.class);

        PendingIntent firstPIntent = PendingIntent.getActivity(context, 0, intent1, 0);
        PendingIntent secondPIntent = PendingIntent.getActivity(context, 0, intent2, 0);

        if(!clicked)
        {
            views.setOnClickPendingIntent(R.id.imageView, firstPIntent);
            clicked = true;
            Log.e("WIdGEt", "ONE");
        }
        else if(clicked)
        {
            views.setOnClickPendingIntent(R.id.imageView, secondPIntent);
            clicked = false;
            Log.e("WIdGEt", "TWO");
        }
请帮我写一些代码(或伪代码)。谢谢


它只是第一个帐篷

这是因为
clicked
始终是
false
,因为
clicked
显然是
AppWidgetProvider
中的一个字段,而
AppWidgetProvider
实例只适用于一次更新

您需要调整逻辑,以跟踪文件、数据库或
SharedReferences
中的“单击”状态-这不仅在
AppWidgetProvider
实例消失后持续,而且在进程终止后也将持续


它只是第一个帐篷

这是因为
clicked
始终是
false
,因为
clicked
显然是
AppWidgetProvider
中的一个字段,而
AppWidgetProvider
实例只适用于一次更新


您需要调整逻辑,以跟踪文件、数据库或
SharedReferences
中的“单击”状态-这不仅在
AppWidgetProvider
实例消失后会持续,而且在进程终止后也会持续。

请确切解释“迄今为止未成功”的含义。你发了密码。运行代码时的行为是什么?另外,请记住,
单击的
是无用的,因为您的
AppWidgetProvider
仅用于一次更新调用。您需要跟踪文件、数据库或
SharedReferences
中单击的
状态。它只运行firstPIntent。我想做一些类似的事情:在第一次单击时,启动一个进程,更改ImageView并等待另一次单击停止。我见过这样的小部件。除了@commonware建议的以外,我还想补充一点,这个
R.mipmap.ic\u摄像头在我看来不是一个好的做法,因为
mipmap
应该只用于应用程序图标AFAIK。@DerGol…嗯,是的,如果我想扩展小部件,这不是一个好主意。我的小部件是1x1单元。所以mipmap图标很好。请准确解释“目前为止没有成功”的含义。你发了密码。运行代码时的行为是什么?另外,请记住,
单击的
是无用的,因为您的
AppWidgetProvider
仅用于一次更新调用。您需要跟踪文件、数据库或
SharedReferences
中单击的
状态。它只运行firstPIntent。我想做一些类似的事情:在第一次单击时,启动一个进程,更改ImageView并等待另一次单击停止。我见过这样的小部件。除了@commonware建议的以外,我还想补充一点,这个
R.mipmap.ic\u摄像头在我看来不是一个好的做法,因为
mipmap
应该只用于应用程序图标AFAIK。@DerGol…嗯,是的,如果我想扩展小部件,这不是一个好主意。我的小部件是1x1单元。所以mipmap图标很好。谢谢你的回答。我的基本要求是:在第一次单击时,启动一个进程,更改ImageView并等待另一次单击停止。我有一些问题。。。1.是否需要为此创建onReceive方法?2.一节课够了吗?还是应该有两节课来“开始”和“停止”?3.所以SharedReference应该在MainActivity.class中,对吗?很抱歉问了这么多问题,这些问题听起来可能很业余,因为我对Android开发还不熟悉。@Theonlynil:“1.我需要为此创建onReceive方法吗?”--我不知道。现在,您的
pendingent
对象指向活动。如果您希望在不显示活动的情况下更改应用程序小部件UI,可以让
pendingent
指向您的
AppWidgetProvider
。这需要您重写
onReceive()
,确定它是否是应用程序小部件的一次单击,并让
AppWidgetProvider
处理“是否”的情况。@onlyAnil:“2.一个类够了吗,或者“开始”和“停止”应该有两个类吗?”——一个类似乎足够了。“3.那么SharedReferences应该在MainActivity.class中,对吗?”--好吧,所有需要了解“单击”状态的信息都需要阅读(可能还需要写入)这个
SharedReferences
值。谢谢你的回答。我的基本要求是:在第一次单击时,启动一个进程,更改ImageView并等待另一次单击停止。我有一些问题。。。1.是否需要为此创建onReceive方法?2.一节课够了吗?还是应该有两节课来“开始”和“停止”?3.所以SharedReference应该在MainActivity.class中,对吗?很抱歉问了这么多问题,这些问题听起来可能很业余,因为我对Android开发还不熟悉。@Theonlynil:“1.我需要为此创建onReceive方法吗?”--我不知道。现在,您的
pendingent
对象指向活动。如果您希望在不显示活动的情况下更改应用程序小部件UI,可以让
pendingent
指向您的
AppWidgetProvider
。这需要您重写
onReceive()
,确定它是否是应用程序小部件的一次单击,并让
AppWidgetProvider
处理“是否”的情况。@onlyAnil:“2.一个类够了吗,或者“开始”和“停止”应该有两个类吗?”——一个类似乎足够了。“3.那么SharedReferences应该在MainActivity.class中,对吗?”--好的,关于“点击”状态需要知道的一切