Android研究2010-07-30 15:45:19阅读7评论0 字号:大中小 订阅
在我们创建Widget后,需要通过点击Widget再次进入Activity,这时候往往需要传递数据,我们可以通过设置PendingIntent的方式在Intent中存放数据达到目的。但是Intent的putExtra()方法无法携带数据,而只能用setData()方法传递,这在之前的外包项目中遇到过,今天在修改EasyNote时再次遇到,所以觉得有必要分享出来。具体代码如下:
public class NoteWidget extends AppWidgetProvider {
private String TAG = NoteWidget.class.getSimpleName();
private NotePadDbAdapter mAdapter;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; i++) {
Log.i(TAG, "onUpdate id=" + appWidgetIds[i]);
int noteId = setting.getNoteWidgetId(appWidgetIds[i]);
if(noteId != -1){
Note note = mAdapter.fetchNoteById(noteId);
Log.i(TAG, "onUpdate noteId=" + noteId);
if (null != note) {
Log.i(TAG, "onUpdate note title=" + note.title);
updateWidget(appWidgetManager,context, appWidgetIds[i], note);
}
}
}
}
@Override
public void onReceive(Context context, Intent intent) {
}
private void updateWidget(AppWidgetManager appWidgetManager, Context context, int appWidgetId, Note note) {
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.widget);
views.setTextViewText(R.id.note_body, note.body);
views.setTextColor(R.id.note_body, note.textColor);
views.setTextViewText(R.id.note_title, note.title);
views.setTextColor(R.id.note_title, note.textColor);
views.setImageViewResource(R.id.note_bg, MainActivity.s_note_bg[note.textBackground]);
Intent intent = new Intent(context,ViewNoteActivity.class);
'''//用setData()方法可以传递数据,但是用putExtra()却不可以达到传递数据的目的'''
Uri dataUri = Uri.parse(String.valueOf(note.id));
intent.setData(dataUri);
//intent.putExtra(ViewNoteActivity.EXTRA_NOTE_ID, note.id);
PendingIntent mPendingIntent = PendingIntent.getActivity(context, 0,
intent, 0);
views.setOnClickPendingIntent(R.id.note_item, mPendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}
}
联系客服