Лучший способ обновить адаптер / ListView на Android

Моя книга «Hello Android» дает это как способ использования пользовательского помощника db, настройки курсора, а затем настройки адаптера следующим образом:

Cursor cursor CustomDatabaseHelper test = new CustomDatabaseHelper(this); try { cursor = getData(); showData(cursor); } finally { test.close(); } 

С этим, однако, каждый раз, когда мне нужно обновить набор данных, мне нужно продолжать работать с этим блоком кода (который немного затрудняет внутри onClick () для кнопки из-за того, что «это» недоступно.

Это лучший способ обновить набор данных, или я должен посмотреть на удаление .close и выдачу адаптера.notifyDataSetChanged ()? Если я это сделаю, иногда я получаю силу как (и я не могу вспомнить на данный момент), но иногда она не может правильно удалить. Я думаю, это может быть из-за того, что база данных в настоящее время открыта, и она пытается открыть ее снова.

Должны ли мы также объявлять переменные для курсоров, DatabaseHelpers и Adapter в классе (вне OnCreate), чтобы они были доступны для всех функций?

Я понимаю, что это просто плохое программирование на данном этапе, но я пытаюсь понять, как лучше всего это делать.

Вы должны использовать adapter.notifyDataSetChanged() . Что говорит журнал, когда вы используете это?

Просто добавьте этот код перед установкой Adapter он работает для меня:

  listView.destroyDrawingCache(); listView.setVisibility(ListView.INVISIBLE); listView.setVisibility(ListView.VISIBLE); 

Или напрямую вы можете использовать метод ниже после изменения ресурса данных.

  adapter.notifyDataSetChanged() 

Следующий код отлично подходит для меня

 EfficientAdapter adp = (EfficientAdapter) QuickList.getAdapter(); adp.UpdateDataList(EfficientAdapter.MY_DATA); adp.notifyDataSetChanged(); QuickList.invalidateViews(); QuickList.scrollBy(0, 0); 

Лучший способ обновить адаптер / ListView на Android

Не только вызов notifyDataSetChanged () обновит данные ListView, перед тем, как правильно загрузить информацию, необходимо вызвать setAdapter() :

  listView.setAdapter(adapter); adapter.notifyDataSetChanged(); 

Если вы используете LoaderManager, попробуйте с этим утверждением:

 getLoaderManager().restartLoader(0, null, this); 
 adapter.notifyDataSetChanged(); 

Возможно, их проблема – это момент, когда поиск выполняется в базе данных. В его циклах переопределения фрагментов его Fragment.java нужно просто выяснить: попробуйте провести тестирование с помощью методов:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_x, container, false); //Your query and ListView code probably will be here Log.i("FragmentX", "Step OnCreateView");// Try with it return rootView; } 

Попробуйте аналогично поставить Log.i … «onStart» и «onResume».

Наконец, отредактируйте код в «onCreate» и поместите его в «onStart», например:

 @Override public void onStart(){ super.onStart(); Log.i("FragmentX","Step OnStart"); dbManager = new DBManager(getContext()); Cursor cursor = dbManager.getAllNames(); listView = (ListView)getView().findViewById(R.id.lvNames); adapter = new CustomCursorAdapter(getContext(),cursor,0);// your adapter adapter.notifyDataSetChanged(); listView.setAdapter(adapter); } 

Просто напишите в своем Custom ArrayAdaper этот код:

 private List<Cart_items> customListviewList ; refreshEvents(carts); public void refreshEvents(List<Cart_items> events) { this.customListviewList.clear(); this.customListviewList.addAll(events); notifyDataSetChanged(); } 

Просто напишите в своем Custom ArrayAdaper этот код:

 public void swapItems(ArrayList<Item> arrayList) { this.clear(); this.addAll(arrayList); } 
Intereting Posts
Получите абсолютную позицию для данного смещения на TextView (Android) Android: нижний вид навигации – значок изменения выбранного элемента Недопустимое использование неполного типа в android ndk с использованием c ++ 11 std :: async Почему мое приложение не отображается на планшетах в Google Play? Приложение не отображается в пусковом устройстве Программно получать цвета темы Android WebView + loadUrl с javascript + onPageFinished = lag Как настроить AspectJ в Android Studio Java: доступ к статическому финальному полю в JNI Java-оболочка для библиотеки Soundtouch Сохранение пользовательских данных из онлайн-сервисов для «автономного просмотра» в приложениях Android Как интегрировать SIP в Android? Как показать фрагмент фрагмента над фрагментом выхода во время анимации. Msgstr "Неверная escape-последовательность (допустимые – \ b \ t \ n \ f \ r \" \ '\\) "Синтаксическая ошибка Удаление подсветки при касании адаптера infoWindow