我搜索了许多这样的问题,但没有在任何一个中找到我的答案。
我有一个活动,通过操作栏可以访问3个选项卡。我通过添加3个片段来实现这一点,这些片段使我提出了扩展视图类的自定义视图。
在数据库更改的时刻,我尝试通过调用invalidate()/ postinvalidate()来刷新我的标签中的视图,但这不起作用。调用该片段的onCreateView同样适用于我认为的许多其他选项。
然而,当我去另一个标签返回时,已经做出了改变,并且我的观点被更新,因为它应该是。
如何模拟与其他选项卡相同的事情?发生什么事我试图看看Fragment的生命周期(试图调用onCreateView())来计算出来,但是它不想像它那样刷新/重画。
数据正确加载,当我更改为另一个选项卡时数据更改。
我删除了一些代码,因为它不再相关。我实现了Cursorloaders而不是我自己的Observer模式来通知更改。这是我现在的主要活动。
问题是如果我想重新绘制这些片段中的视图,该怎么办?如果我应用fragmentObject.getView()。invalidate()它不工作。我有与以前相同的问题,但现在我的Observer通知数据库中的更改正确地与加载程序实现。
public class ArchitectureActivity extends Activity implements LoaderManager.LoaderCallbacks {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionbar = getActionBar();
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab EditTab = actionbar.newTab().setText("Edit");
ActionBar.Tab VisualizeTab = actionbar.newTab().setText("Visualize");
ActionBar.Tab AnalyseTab = actionbar.newTab().setText("Analyse");
Fragment editFragment = new EditFragment();
Fragment visualizeFragment = new VisualizeFragment();
Fragment analyseFragment = new AnalyseFragment();
EditTab.setTabListener(new MyTabsListener(editFragment));
VisualizeTab.setTabListener(new MyTabsListener(visualizeFragment));
AnalyseTab.setTabListener(new MyTabsListener(analyseFragment));
actionbar.addTab(EditTab);
actionbar.addTab(VisualizeTab);
actionbar.addTab(AnalyseTab);
ArchitectureApplication architectureApplication = (ArchitectureApplication)getApplicationContext();
architectureApplication.initialize();
getLoaderManager().initLoader(0, null, this);
getLoaderManager().initLoader(1, null, this);
}
public Loader onCreateLoader(int id, Bundle args) {
if (id == 0){
return new CursorLoader(this, GraphProvider.NODE_URI , null, null, null, null);
} else if (id == 1){
return new CursorLoader(this, GraphProvider.ARC_URI , null, null, null, null);
}
return null;
}
public void onLoadFinished(Loader loader, Cursor cursor) {
// Reloading of data, actually happens because when switching to another tab the new data shows up fine
Log.e("Data", "loaded");
}
public void onLoaderReset(Loader loader) {
}
}