我创建了一个Fragment
,其中包含一个带有多个项目的ListView
。根据我的计划,当我点击ListView
上的其中一项时,我会移动到另一个Fragment
,从中获取数据,替换原始数据并更新ListView
。为了实现这一点,我编写了以下代码。
Code inside the
onCreateView()
methodlistAdapter = new AlarmOptionItemListAdapter(); lvAlarmOptionList = (ListView) view.findViewById(R.id.lvAlarmOptionList); initializeListItems(); lvAlarmOptionList.setAdapter(listAdapter);
The
initializeListItems()
method that adds several items tolvAlarmOptionList
, theListView
instance.private void initializeListItems() { itemRepeatAlarm = new TextOnlyItem(); itemRepeatAlarm.setTitle(getString(R.string.repeat_weekly)); itemRepeatAlarm.setSubtitle(getString(R.string.never)); listAdapter.addItem(itemRepeatAlarm); itemAlarmLock = new TextOnlyItem(); itemAlarmLock.setTitle(getString(R.string.alarm_lock)); itemAlarmLock.setSubtitle(getString(R.string.choose_option)); listAdapter.addItem(itemAlarmLock); }
onActivityResult()
method that gets the data from the otherFragment
and modify the items on theListView
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode == RESULT_OK && data != null) { switch(requestCode) { case CODE_PIN: String value = data.getStringExtra(Keys.VALUE); if(value != null) { Log.i(ApplicationManager.LOG, "PIN set to " + value); } break; case CODE_PASSWORD: String password = data.getStringExtra(Keys.VALUE); if(password != null) { Log.i(ApplicationManager.LOG, "Password set to " + password); } break; case CODE_REPEAT: repeatType = data.getIntExtra(Keys.REPEAT_TYPE, 0); switch(repeatType) { case Keys.SINGLE: case Keys.PLURAL: Toast.makeText(activity, data.getStringExtra(Keys.REPEAT_MESSAGE), Toast.LENGTH_SHORT).show(); itemRepeatAlarm.setSubtitle(getString(R.string.on)); listAdapter.notifyDataSetChanged(); onResume(); break; case Keys.NO_REPEAT: Toast.makeText(context, getString(R.string.alarm_will_never_repeat), Toast.LENGTH_SHORT).show(); itemRepeatAlarm.setSubtitle(getString(R.string.never)); listAdapter.notifyDataSetChanged(); onResume(); break; case Keys.EVERY_DAY: Toast.makeText(context, getString(R.string.alarm_will_repeat_every_day), Toast.LENGTH_SHORT).show(); itemRepeatAlarm.setSubtitle(getString(R.string.every_day)); listAdapter.notifyDataSetChanged(); onResume(); break; } break; case CODE_PATTERN: pattern = data.getStringExtra(Keys.VALUE); if(pattern != null) { Log.i(ApplicationManager.LOG, "Pattern set to " + pattern); } itemAlarmLock.setSubtitle(getString(R.string.pattern)); listAdapter.notifyDataSetChanged(); onResume(); break; } } }
And finally, the
onResume()
method@Override public void onResume() { super.onResume(); if(listAdapter != null) { listAdapter.notifyDataSetChanged(); } }
我成功地使用onActivityResult()
方法从另一个Fragment
中获取数据,但是我一直无法刷新ListView
中的数据。
onResume
)。 - Divers