#android #android-tabhost
#Android #android-tabhost
Вопрос:
У меня есть вкладки, новые и ОТЧЕТЫ. На вкладке ОТЧЕТЫ я создаю listview, который создается динамически. Теперь элементы списка listview извлекаются из базы данных. Таким образом, каждый раз, когда загружается вкладка ОТЧЕТЫ, элементы списка listview должны извлекаться из базы данных на случай, если в элементах списка произошли изменения. Если я помещу все это на вкладку onCreate of REPORTS, все будет работать идеально. Но если я переключусь на другую вкладку и вернусь на вкладку ОТЧЕТЫ, listview будет заполнен, но изменения, внесенные в базу данных, в элементах списка не будут отражены. Всякий раз, когда я возвращаюсь на вкладку ОТЧЕТЫ, мне нужно получить текущие данные из базы данных и отобразить в listview.
Итак, проблема в том, что, поскольку я выполняю заполнение listview в onCreate, это происходит только один раз. Поискав в Интернете, я нашел материал TabContentFactory (). Ну, я думал, это решит мою проблему. Это то, что я сделал,
TabHost.TabSpec reportsSpec = tabHost.newTabSpec("reports").setIndicator("Reports")
.setContent(new TabHost.TabContentFactory(){
public View createTabContent(String tag) {
Context context = Main_screen.this;
ls1 = new ListView(Main_screen.this);
//populate m_data from the database
CustomAdapter adapter = new CustomAdapter(context, m_data);
ls1.setAdapter(adapter);
return ls1;}});
tabHost.addTab(reportsSpec);
Но это не решает мою проблему. Похоже, что код внутри createTabContent выполняется только при создании вкладки, а не каждый раз, когда я переключаюсь на вкладку ОТЧЕТЫ.
Можно ли это вообще сделать? Можем ли мы создавать содержимое вкладки каждый раз, когда мы переключаемся на вкладку? Пожалуйста, помогите. Любая помощь приветствуется.
Комментарии:
1. ваши вкладки просматриваются или другие действия? если просмотры, почему бы просто не выполнить adapter.notifyDataSetChanged()
2. @jkhouw1: вкладки — это разные действия. .notifyDataSetChanged() не имело никакого значения.
Ответ №1:
В tabview попробуйте поместить загрузку данных в метод onResume.
Комментарии:
1. Я действительно надеялся, что это сработает. Но загрузка данных в onResume также не сработала.
2. Это сработало! Спасибо! Я допустил ошибку, когда вызвал onResume (). Я делал onResume (Bundle savedInstanceState) вместо onResume(). Большое вам спасибо. Я занимаюсь этим последние 3 часа. Я продолжал думать, что смогу достичь этого с помощью TabHost. TabContentFactory или setOnTabChangedListener. Я совершенно забыл, что вкладка была просто действием, и я мог бы выполнить onResume ().