从应用程序内部刷新窗口小部件

时间:2018-10-06 13:55:54

标签: android listview widget sharedpreferences android-widget

美好的一天!我想将文本从应用程序内部添加到窗口小部件,我有一个主要活动,它具有列表视图和大量文本内容,并且它具有一个按钮,可以通过共享首选项将文本添加到窗口小部件,当我关闭窗口小部件并仅重新创建它,否则它不会自动刷新。如何解决这个问题,请帮帮我。在这里,我在下面附加了小部件代码。

    public class WidgetMaster extends AppWidgetProvider {

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

    Intent intentHome = new Intent(context, MainActivity.class);
    PendingIntent pendingIntentHome = PendingIntent.getActivity(context, 0, intentHome, 0);

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

    views.setOnClickPendingIntent(R.id.wid_home, pendingIntentHome);

    final SharedPreferences sharedPreferencestoWi = context.getSharedPreferences(String.valueOf(R.string.addTextToWidgetPref), MODE_PRIVATE);
    String forWidget = sharedPreferencestoWi.getString("textToWidget", "");
    String dum = "add from reading";
    if(forWidget.equals("")){
        views.setTextViewText(R.id.dum_appwidget_text, dum);
        appWidgetManager.updateAppWidget(appWidgetId, views);
    } else {
        views.setTextViewText(R.id.appwidget_text, forWidget);
        views.setViewVisibility(R.id.appwidget_text, 0);
        appWidgetManager.updateAppWidget(appWidgetId, views);
    }

}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
        for (int appWidgetId : appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId);
        }

}

@Override
public void onEnabled(Context context) {
    // Enter relevant functionality for when the first widget is created
}

@Override
public void onDisabled(Context context) {
    // Enter relevant functionality for when the last widget is disabled
}

}

1 个答案:

答案 0 :(得分:0)

如何从mainActivity更新小部件?

在小部件配置文件中,您可以指定固定的更新间隔。最小的更新间隔是1800000毫秒(30分钟)。

但是最好以编程方式更新小部件,为此,您应该发送broadCast来更新小部件并使用 例如,对于重复任务
这样的方法,例如alarmManager或Handler,您可以使用以下broadCast更新窗口小部件形式mainActivity:

Intent intent = new Intent(this, WidgetMaster.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);                   

int[] ids = AppWidgetManager.getInstance(getApplication())
                      .getAppWidgetIds(new ComponentName(getApplication(),WidgetMaster.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(intent);