Проект BookListing. Кожен пошук книг перекриває попередні результати. Як ви очистите ListView?

Це моя інформація на сайті:

        Button searchButton = (Button) findViewById(R.id.search_button);
    searchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

                BookListFragment bookListFragment = new BookListFragment();

                getSupportFragmentManager().beginTransaction()
                        .add(R.id.book_list_frame, bookListFragment).commit();

            }

    });

Фрагмент BookListFragment w/BookLoader:

    @Override
public Loader> onCreateLoader(int i, Bundle args) {

    return new BookLoader(this, GOOGLE_BOOKS_URL + searchedBook);
}


@Override
public void onLoadFinished(Loader> loader, List bookListings) {
    mAdapter.clear();


    if(bookListings != null && !bookListings.isEmpty()) {
        mAdapter.addAll(bookListings);
    }

}

@Override
public void onLoaderReset(Loader> loader) {
    mAdapter.clear();

}

Я можу отримати результати пошуку. Але при пошуку знову попередні результати не зрозумілі. Вони просто постійно перекриваються.

First Search Screenshot Second Search Screenshot

1

5 Відповіді

 @Override
 public Loader> onCreateLoader(int i, Bundle args) {

 return new BookLoader(this, GOOGLE_BOOKS_URL + searchedBook);
 }


@Override
public void onLoadFinished(Loader> loader, 
    List bookListings) {
         mAdapter.clear();


if(bookListings != null && !bookListings.isEmpty()) {
    mAdapter.replace(bookListings);
    }

}
@Override
public void onLoaderReset(Loader> loader) {
mAdapter.clear();
 }
2
додано

difference between fragmentTransaction.add and fragmentTransaction.replace Just further adding onto CamiloCons answer, you're "adding" a new layer of fragments on top everytime you call add().

0
додано
Дякую! Я знав, що це щось невелике, просто не міг знайти відповіді.
додано Автор T. Rodgers, джерело

You have to use replace() instead of add()

 getSupportFragmentManager().beginTransaction()
                            .replace(R.id.book_list_frame, bookListFragment).commit();

Це має це зробити

0
додано
повторювана відповідь?
додано Автор phpdroid, джерело
@phpdroid я писав відповідь, коли він опублікував
додано Автор Cold Fire, джерело

Це одне рішення. Видалення всіх дочірніх переглядів (рядків) шляхом першого отримання їхніх батьків (ListView).

public void removeView(View v) {
    if(v.getParent() != null) {
        ((ViewGroup) v.getParent()).removeView(v);
    }
}

Зателефонуйте removeView (v) для кожного рядка вашого ListView. У цьому випадку всі рядки мають спільний доступ до одного з батьків, тому спробуйте зробити це поле для батьківського екземпляра, а потім вказаний вище метод:

ListView listView;

. . .

public static void removeView(View v) {
    listView.removeView(v);
}

Можна також видалити всі рядки з одним викликом:

listView.removeAllViews();

Сподіваюся, що це допомагає!

0
додано

When adding a BookListFragment, use replace() instead of add()

getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.book_list_frame, bookListFragment)
    .commit();

Сподіваюся, що це допоможе

0
додано
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.