【发布时间】:2016-09-02 13:22:24
【问题描述】:
我创建了 1*1 的小部件。小部件的布局包含 ImageView ,图像视图的图像是这样设置的
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.layout_appwidget_small);
Intent defineIntent = new Intent(context, MainActivity.class);
defineIntent.putExtra("from_widget", true);
PendingIntent pendingIntent1;
views.setImageViewResource(R.id.img_widget,R.drawable.ic_launcher);
defineIntent.putExtra("type_from_widget", 1);
pendingIntent1 = PendingIntent.getActivity(context, 0, defineIntent, 0);
views.setOnClickPendingIntent(R.id.img_widget, pendingIntent1);
appWidgetManager.updateAppWidget(intExtra, views);
但我通过检查 ConfigurationActivity 中的某些条件为 ImageView 选择图像。 我将小部件的详细信息存储在与 AppWidgetId 的共享首选项中,并在重新启动后对其进行维护,加载需要几秒钟。 清除应用数据后重新启动设备时,小部件变为空白的另一个主要原因
将数据存储在共享首选项中。
SharedPreferences prefs = context.getSharedPreferences("prefs", 0);
SharedPreferences.Editor edit = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(MainActivity.widgetBeanArrayList);
edit.putString("widget_arraylist", json);
edit.commit();
在 AppWidgetProvider 类的 onReceive 方法中检索它并维护我的小部件
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(intent.getBooleanExtra("from_config_activity",false)){
for (int mAppWidgetId : intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS)) {
update(mAppWidgetId,intent.getIntExtra("image_id",0));
}
}
if(intent.getBooleanExtra("switch_on",false)){
AppWidgetManager appWidgetManager = AppWidgetManager
.getInstance(context);
SharedPreferences settings = context.getSharedPreferences("prefs", 0);
if(settings != null) {
Gson gson = new Gson();
String json = settings.getString("widget_arraylist", null);
Type type = new TypeToken<ArrayList<WidgetBean>>() {}.getType();
MainActivity.widgetBeanArrayList = gson.fromJson(json, type);
if(MainActivity.widgetBeanArrayList!=null) {
if (MainActivity.widgetBeanArrayList.size() > 0){
for(int i = 0;i < MainActivity.widgetBeanArrayList.size();i++){
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.layout_appwidget_small);
if(MainActivity.widgetBeanArrayList.get(i).icon == 1) {
views.setImageViewResource(R.id.img_widget, R.drawable.feed_detail_share);
}else if(MainActivity.widgetBeanArrayList.get(i).icon == 2){
views.setImageViewResource(R.id.img_widget, R.drawable.feed_detail_edit);
}else if(MainActivity.widgetBeanArrayList.get(i).icon == 3){
views.setImageViewResource(R.id.img_widget, R.drawable.feed_list_audio);
}
Intent defineIntent = new Intent(context, MainActivity.class);
defineIntent.putExtra("from_widget", true);
PendingIntent pendingIntent1 = PendingIntent.getActivity(context, 0, defineIntent, 0);
views.setOnClickPendingIntent(R.id.img_widget, pendingIntent1);
appWidgetManager.updateAppWidget(MainActivity.widgetBeanArrayList.get(i).id, views);
}
}
}
}else{
Log.d("tag", "=============settingd=====null===");
}
}
我必须维护小部件图像而不将详细信息存储在共享首选项中。 有什么建议吗?
提前致谢。
【问题讨论】:
标签: android android-widget android-appwidget