android小部件的来实现复杂的列表(ListView,GridView)布局,已加载网络数据,添加item点击事件,及点击后跳转到新的Activity整个过程总结。
剩下2个关键的问题尚未很好的解决:
a、异步加载列表数据无法实时更新到
b、列表数据滚动时导致图片错乱的问题
为每一个List 的Item添加点击事件需要使用setOnClickFillInIntent方法设置填充事件
@Override
public RemoteViews getViewAt(int position) {
if (position < 0 || position >= mList.size())
return null;
String content = mList.get(position);
// 创建在当前索引位置要显示的View
final RemoteViews rv = new RemoteViews(mContext.getPackageName(),
R.layout.my_widget_layout_item);
// 设置要显示的内容
rv.setTextViewText(R.id.widget_list_item_tv, content);
// 填充Intent,填充在AppWdigetProvider中创建的PendingIntent
Intent intent = new Intent();
// 传入点击行的数据
intent.putExtra("content", content);
rv.setOnClickFillInIntent(R.id.widget_list_item_tv, intent);
return rv;
}
通知Adapter更新列表数据时调用方法(通知更新前应该将数据准备好而不是异步去请求数据,否则造成数据请求完成无法显示的现象):
final AppWidgetManager mgr = AppWidgetManager.getInstance(context);
final ComponentName cn = new ComponentName(context, ExampleAppWidgetProvider.class);
// 调用数据添加
MyRemoteViewsFactory.mList.add("data" + i);
// 这句话会调用RemoteViewSerivce中RemoteViewsFactory的onDataSetChanged()方法。
mgr.notifyAppWidgetViewDataChanged(mgr.getAppWidgetIds(cn),
R.id.widget_list);