java - Android 小部件按钮单击添加

标签 java android button widget

当我从手机上的小部件页面添加我的小部件时,它会播放消息“按钮已单击”。 toast 应该只在您按下按钮时显示,并且它可以工作,但是当小部件添加到屏幕时它也会显示。

我猜这可能与 super 有关,但我不确定。

代码:

       @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, Provider.class);
               intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
               PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

               RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
               views.setOnClickPendingIntent(R.id.onoffbutton, pendingIntent);

               appWidgetManager.updateAppWidget(appWidgetId, views);
           }
       }
           @Override 
           public void onReceive(Context context, Intent intent) {
               super.onReceive(context, intent);
               if (intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE)) {
                   Toast.makeText(context, "Button Clicked", Toast.LENGTH_SHORT).show();
                   System.out.println("Click!");
                   }

           }

编辑:

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


       @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, Provider.class);
               intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
               Intent clickIntent = new Intent(context, Provider.class);
               clickIntent.setAction(BUTTON_CLICK);  
               PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

               RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
               views.setOnClickPendingIntent(R.id.onoffbutton, pendingIntent);

               appWidgetManager.updateAppWidget(appWidgetId, views);
           }
       }
          @Override 
           public void onReceive(Context context, Intent clickIntent) {
               super.onReceive(context, clickIntent);
               if (clickIntent.getAction().equals(BUTTON_CLICK)) {
                   Toast.makeText(context, "Button Clicked", Toast.LENGTH_SHORT).show();
                   System.out.println("Click!");
                   }

           }

最佳答案

那是因为你对小部件更新有相同的操作

为按钮创建一个单独的 Intent 操作(例如 BTN_ACTION)。在 onReceive() 中检查哪个 i=action Intent 具有以及是否有 intent.getAction().equals(BTN_ACTION) - 处理按钮点击。

关于java - Android 小部件按钮单击添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21667717/

相关文章:

java - 如何在java中对齐文本文件的列?

ios - 控制两个不同的collectionview

android - 是否可以通过检查 getInstallerPackageName 来检查安装付费 android 应用程序的合法性?

android - gradle connectedAndroidTest如何调试junit测试执行

android - 布局在 StatusBar 和 Soft Keys 下

javascript - div 中的按钮都带有 onclick 事件 - 如何在单击按钮时仅触发两者之一?

java - 根据当前背景更改按钮背景

java - 具有 JPA 实体的 RESTful 客户端

java - NullPointerException - Drawable.setBounds - 可能是由于 fragment 转换

java - 无法绑定(bind) rich :dataTable