java - 单击按钮时如何立即更新小部件 View

标签 java android widget android-widget receiver

我在这里看到了很多答案,但没有一个起作用......!我只想在单击旁边的按钮后立即更新 TextView 。!我尝试打印一条 toast 消息,它显示正常,但更新 View 是问题所在。

我的代码

public class FollowersWidget extends AppWidgetProvider {

  public static String REFRESH_ACTION = "android.appwidget.action.APPWIDGET_UPDATE";

  int x = 0;

  @Override
  public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent); 

    if (intent.getAction().equals(REFRESH_ACTION)) {
      AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
      final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.followers_widget);

      x++;
      views.setTextViewText(R.id.textv_count, x + "");

      int[] appWidgetId = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, FollowersWidget.class));
      appWidgetManager.updateAppWidget(appWidgetId, views); 
    }

  }

  static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
      int appWidgetId) {

    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.followers_widget);

    try {

      String count = MyConfigureActivity.getNumCount(context, appWidgetId);
      views.setTextViewText(R.id.textv_count, count );

      views.setOnClickPendingIntent(R.id.refreshButton,getRefreshPendingIntent(context, appWidgetId));

    } catch (Exception e) {
      e.printStackTrace();
    }

    appWidgetManager.updateAppWidget(appWidgetId, views);
  }

  public static PendingIntent getRefreshPendingIntent(Context context, int appWidgetId) {
    Intent intent = new Intent(REFRESH_ACTION);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  }

// other widget methods..
..
.
}

我的 list

  <receiver android:name=".FollowersWidget">
      <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
      </intent-filter>

      <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/followers_info"/>
    </receiver>

最佳答案

我终于弄清楚了,我已经看到了很多处理小部件上的 onClick 的方法,但这种方法对我来说很有效,并且它会立即更新 View 。

代码

public class TestWidget extends AppWidgetProvider {

  public static String REFRESH_ACTION = "android.appwidget.action.APPWIDGET_UPDATE";
  static private RemoteViews views;
  private int x = 0;

   @Override
    public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);

    if (intent.getAction().equalsIgnoreCase(REFRESH_ACTION)) {
      views = new RemoteViews(context.getPackageName(), R.layout.test_widget);
      AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
      int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, TestWidget.class));
      x++;
      views.setTextViewText(R.id.textv_count, x + "");
      appWidgetManager.updateAppWidget(appWidgetIds, views);
    }
  }

   static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {

    views = new RemoteViews(context.getPackageName(), R.layout.test_widget); 
    views.setTextViewText(R.id.textv_count, x + "");
    views.setOnClickPendingIntent(R.id.button, getPenIntent(context));
    appWidgetManager.updateAppWidget(appWidgetId, views);
  }



    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
     for (int appWidgetId : appWidgetIds) {
      appWidgetManager.updateAppWidget(appWidgetId, views);
    }
  }

    static private PendingIntent getPenIntent(Context context) {
    Intent intent = new Intent(context, TestWidget.class);
    intent.setAction(REFRESH_ACTION);
    return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  }

}

关于java - 单击按钮时如何立即更新小部件 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46704857/

相关文章:

android - 一个 NFC 标签上的 2 个 NDEF 消息/记录 - Android

java - RecyclerAdapter getItemCount 崩溃

android - 在自定义 View 中提供默认样式(属性)

java - 使用 pdfbox 获取表单字段值

Java - 使用经典for循环会出现并发修改异常吗?

android - $http 在 phonegap 中有效吗?

AppWidgetManager.updateAppWidget 中的 android.os.TransactionTooLargeException

flutter - 在表单窗口小部件中放置扩展的位置

Java:为什么需要构造函数来使用父类中的对象?

java - 使Jackson在序列化时不输出类名(使用Spring MVC)