Я искал многочисленные вопросы, похожие на этот, но не нашел ответа ни на один из них.
У меня есть активность, в которой есть 3 вкладки, доступные через панель действий. Я добился этого, добавив 3 фрагмента, которые расширяют пользовательское представление, которое я сделал, расширяя класс представления.
В момент изменения базы данных я пытаюсь обновить представление на своей вкладке, вызывая invalidate()/postinvalidate(), но это не работает. То же самое верно для вызова onCreateView фрагмента, как и многие другие варианты, которые я рассматривал.
Однако, когда я перехожу на другую вкладку и возвращаюсь назад, изменение было внесено, и мое представление обновляется, как и должно быть.
Как я могу смоделировать то же самое, что происходит при переходе на другую вкладку? Что происходит. Я попытался посмотреть на жизненный цикл фрагмента (пытался вызвать onCreateView()), чтобы понять это, но он просто не хочет обновлять/перерисовывать, как должен.
Данные загружаются правильно, так как данные меняются, когда я перехожу на другую вкладку.
Я удалил часть кода, так как он больше не актуален. Я реализовал Cursorloaders вместо собственного шаблона Observer, чтобы уведомлять об изменении. Это моя основная деятельность сейчас.
Вопрос в том, что мне теперь делать, если я хочу перерисовать вид внутри этих фрагментов. Если я применяю fragmentObject.getView().invalidate(), это не сработает. У меня та же проблема, что и раньше, но теперь мой Observer для уведомления об изменении в базе данных правильно реализован с помощью загрузчиков.
public class ArchitectureActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
@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<Cursor> 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<Cursor> 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<Cursor> loader) {
}
}
Fragment#getView()
... разве представление, возвращаемоеgetView()
, не является представлением, которым вы пытаетесь манипулировать? Возможно, причина, по которой вид не перерисовывается, заключается в том, что вы не обновляете правильный вид? - person Alex Lockwood   schedule 08.10.2012