Listivew Widget not updating automatically(Listivew 小部件不会自动更新)
问题描述
我的朋友已经完成了一个应用程序,现在他为他的应用程序创建了一个小部件,可用于以列表视图的方式显示任务列表.首先,当他拖动小部件并安装在主屏幕上时,它会正常工作并以列表视图的方式显示任务.
My friend have completed one application and now he created one widget for his application which can be used to display the list of task in list view manner. In first when he drag the widget and install in home screen it will be working fine as well as display the task in list view manner.
他的问题是,当他在应用程序中进行更改然后返回主屏幕时,没有反映任何更改.他正在为此使用 onReceive() 方法来更新小部件
His problem is, when he made changes in his application and then come back to his home screen, No changes reflected. He is using onReceive() method for this one to update the widget
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.util.Log;
import android.widget.RemoteViews;
public class WidgetTaskSchedular extends AppWidgetProvider {
private final String TAG = "CalendarViewSample:"
+ this.getClass().getName();
SharedPreferences sharedprefer;
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(intent.getAction().equals("update_widget"))
{
int[] appid=new int[1];
sharedprefer=context.getSharedPreferences("TaskWidget", 0);
appid[0]=sharedprefer.getInt("widget_key",0);
Log.i(TAG,"Appwidgetid"+appid[0]);
onUpdate(context, AppWidgetManager.getInstance(context),appid);
}
}
public static String EXTRA_WORD=
"com.capsone.testing.calendar.WORD";
@SuppressWarnings("deprecation")
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int i=0; i<appWidgetIds.length; i++) {
sharedprefer=context.getSharedPreferences("TaskWidget", 0);
SharedPreferences.Editor editor=sharedprefer.edit();
editor.putInt("widget_key", appWidgetIds[i]);
editor.commit();
int a= sharedprefer.getInt("widget_key", 0);
Log.i(TAG,"Sharedpreferencewidgetid:"+a);
//ID=appWidgetIds[i];
Log.i(TAG,"LengthofWidget:"+appWidgetIds.length);
// Log.i(TAG,"TestAppWidget:"+ID);
Intent intentWidgetService=new Intent(context, WidgetService.class);
intentWidgetService.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intentWidgetService.setData(Uri.parse(intentWidgetService.toUri(Intent.URI_INTENT_SCHEME)));
RemoteViews remoteView=new RemoteViews(context.getPackageName(),
R.layout.widgetlayout);
remoteView.setRemoteAdapter(appWidgetIds[i], R.id.listWidget,
intentWidgetService);
Intent clickIntent=new Intent(context, ActionBarActivity.class);
PendingIntent clickPendingIntent=PendingIntent
.getActivity(context, 0,
clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setPendingIntentTemplate(R.id.listWidget, clickPendingIntent);
ComponentName component=new ComponentName(context,WidgetTaskSchedular.class);
appWidgetManager.updateAppWidget(component, remoteView);
}
}
}
推荐答案
建议你试试下面粘贴的代码:
I suggest you to try the code pasted below:
ComponentName component=new ComponentName(context,WidgetTaskSchedular.class);
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.listWidget);
appWidgetManager.updateAppWidget(component, remoteView);
notifyAppWidgetViewDataChanged() --->通知所有指定的AppWidget 实例中的指定collection view 使其当前数据无效.
notifyAppWidgetViewDataChanged() --->Notifies the specified collection view in all the specified AppWidget instances to invalidate their currently data.
因此,当您调用 notifyAppWidgetViewDataChanged() 时,将调用 RemoteViewsFactory 的 onDataSetChanged() 方法,该方法用作您的适配器列表视图.您可以在 onDataSetChanged() 中进行 web 服务/网络相关操作、从数据库中获取数据操作和其他操作,获取响应并将其添加到您的数据集中,可能是 ArrayList 或任何此类 Collection.
So when you call notifyAppWidgetViewDataChanged() then the onDataSetChanged() method of RemoteViewsFactory will be called which is serving as a Adapter for your ListView. You can do web-service/network related operations, data fetching operation from database and other operations in onDataSetChanged(), get the response and add it to your data-set which maybe ArrayList or any such Collection.
您可以参考Using App Widgets with Collections
这篇关于Listivew 小部件不会自动更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Listivew 小部件不会自动更新
基础教程推荐
- 如何从 logcat 中删除旧数据? 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
