BookListingプロジェクト。各書籍検索は、以前の結果と重複しています。どのようにListViewをクリアしますか?

これが私のonClick情報です。

        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();

            }

    });

BookLoader付きBookListFragment:

    @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,

これは1つの解決策です。最初に親(ListView)を取得して、すべての子ビュー(行)を削除します。

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

ListViewのすべての行に対して removeView(v)を呼び出します。この場合、すべての行が1つの親を共有するので、その親をインスタンスフィールドにしてから、上記の方法になります。

ListView listView;

. . .

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

次のようにして、1回の呼び出しですべての行を削除することもできます。

listView.removeAllViews();

お役に立てれば!

0
追加された

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

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

それが役に立てば幸い

0
追加された