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