나는 ListView
과 몇 가지 항목이있는 Fragment
을 만들었습니다. 내 계획에 따르면 ListView
에있는 항목 중 하나를 클릭하면 다른 Fragment
으로 이동하여 데이터를 가져오고 원래 데이터를 새 데이터로 바꾸고 ListView
을 업데이트합니다. 이를 위해 다음과 같이 코드를 작성했습니다. onCreateView()
방법안드로이드 : 조각에서 ListView 항목의 값을 변경하는 방법?
listAdapter = new AlarmOptionItemListAdapter();
lvAlarmOptionList = (ListView) view.findViewById(R.id.lvAlarmOptionList);
initializeListItems();
lvAlarmOptionList.setAdapter(listAdapter);
lvAlarmOptionList
에 여러 항목의 ListView
인스턴스를되게 된 initializeListItems()
방법 내부
코드입니다. 마지막으로 다른
Fragment
에서 데이터를 가져 와서ListView
@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; } } }
의 항목을 수정하고
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()
방법의onResume()
방법@Override public void onResume() { super.onResume(); if(listAdapter != null) { listAdapter.notifyDataSetChanged(); } }
I 관리 된 t o onActivityResult()
메서드를 사용하여 다른 Fragment
에서 데이터를 성공적으로 가져 왔지만 ListView
의 데이터를 새로 고치지 않습니다.
코드에서 안드로이드의 콜백 (예 :'onResume')을 절대 호출하면 안됩니다. – Divers