每次搜索新词

时间:2017-07-22 06:04:54

标签: android listview

我正在使用Google图书API搜索带有标题的图书。它首次向我展示了结果。接下来我搜索它会清除ListView但不显示新的搜索结果。 有一个特殊的错误。当我搜索一本书时,它会显示3到4本书,而我已将MaxResult设置为10.当我在浏览器中手动调用API时,我得到10个结果。

这是我正在使用的代码。

    public class MainActivity extends AppCompatActivity implements LoaderCallbacks<List<Book>>{

    private static final int BOOK_ID = 1;
    public static final String LOG_TAG = MainActivity.class.getName();

    private static String book_url;

    private BookAdapter mAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button bt=(Button)findViewById(R.id.search);





        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText searchTerm=(EditText)findViewById(R.id.search_book);
                String search=searchTerm.getText().toString();

                book_url="https://www.googleapis.com/books/v1/volumes?q="+search+"&maxResults=10";

                LoaderManager loaderManager = getLoaderManager();
                loaderManager.initLoader(BOOK_ID, null, MainActivity.this);

                mAdapter=new BookAdapter(MainActivity.this,new ArrayList<Book>());
                ListView bookListView=(ListView)findViewById(R.id.list);
                mAdapter.notifyDataSetChanged();
                bookListView.setAdapter(mAdapter);


            }
        });
    }

    public Loader<List<Book>> onCreateLoader(int i,Bundle bundle){
        return new BookLoader(this,book_url);
    }

    public void onLoadFinished(Loader<List<Book>> loader,List<Book> books){
        mAdapter.clear();
        if(books!=null&&!books.isEmpty()){
            mAdapter.addAll(books);
        }
    }

    public void onLoaderReset(Loader<List<Book>> loader){
        mAdapter.clear();
    }
}

我试过notifyDataSetChanged()。但它不起作用。

以下是自定义适配器的代码

package com.example.android.booksearch;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.List;

/**
 * Created by AKSPAN12 on 19-07-2017.
 */

public class BookAdapter extends ArrayAdapter<Book> {

    public BookAdapter(Context context, List<Book> books) {
        super(context, 0,books);
    }

    public View getView(int position, View convertView, ViewGroup parent){
        View listItemView=convertView;
        if(listItemView==null){
            listItemView= LayoutInflater.from(getContext()).inflate(R.layout.book_list,parent,false);
        }

        Book currentBook=getItem(position);

        String author=currentBook.getAuthor();
        TextView authorView=(TextView)listItemView.findViewById(R.id.book_author);
        authorView.setText(author);

        String bookName=currentBook.getBook();
        TextView bookView=(TextView)listItemView.findViewById(R.id.book_name);
        bookView.setText(bookName);

        return listItemView;
    }


}

1 个答案:

答案 0 :(得分:0)

  

它首次向我展示了结果。接下来我搜索它会清除ListView但不显示新的搜索结果。

您可能需要restart your loader