如何在视图和数据之间实现更好的同步



想象有一个MainActivity,其中有一个带有ArrayAdapterListView。在属于MainActivity的视图中,我直接更新数据;例如,在我的PageAdapter课上:

@Override
public void finishUpdate(View arg0) {
ViewPager vp = (ViewPager) arg0;
if (vp.getCurrentItem() != this.current_item){
this.current_item = vp.getCurrentItem();
ContentStatus status;
switch(vp.getCurrentItem()){
case(0): 
status = ContentStatus.NOTINTERESTING;
break;
case(2): 
status = ContentStatus.INTERESTING;
break;
default: 
status = ContentStatus.ACTIVE;
}
MainActivity.content.setItemStatus(content.identifier, status);
final Activity act = (Activity) this.context;
ArrayAdapter adapter = (ArrayAdapter) ((ListView) act.findViewById(R.id.view_sequence)).getAdapter();
adapter.notifyDataSetChanged();
}
}

我需要在另一个从MainActivity打开并使用相同的数据的活动中重现此代码,因为如果用户更改了其他活动的某些数据,然后关闭它并返回到 MainActivity,我必须重新绘制MainActivity的视图。作为变体,我是否应该使用ActivityonResume()方法来更新所有与数据绑定的视图?

我应该使用activitie的onResume方法来更新所有绑定到数据的视图吗?

简答?是 - 如果每次暂停和恢复活动时活动的视图状态都可能更改,则在简历上更新所有视图状态是有意义的。 如果您愿意,这更符合"android 方式"——两个活动不应该相互影响,除非它们以某种方式使用相同的数据。 如果他们使用相同的数据,您可以考虑将第二个活动设为Fragment;这样,与该位数据相关的所有操作都绑定到具有多个片段的单个活动。

一个简单的解决方案是告诉适配器数据已更改,当返回第一个活动时,这样视图将被刷新。所以在你的MainActivity

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
((AdapterYouAreUsing) listView.getAdapter()).notifyDataSetChanged();
}

假设您使用startActivityForResult()方法开始第二个活动。或者你将不得不在onResume()打电话给notifyDataSetChanged()

最新更新