Android ListView搜索视图

Android ListView搜索视图,android,listview,filter,searchview,Android,Listview,Filter,Searchview,我创建了一个由SQLite数据库填充的ListView。 在我的应用程序中,您可以将书籍添加到数据库,并可以在BookDataListActivity中查看图书列表 现在我想实现一个SearchView来过滤书籍。我用了这个视频 但它不起作用。 遵循我的代码。希望你能帮助我 package com.kasutwentyseven.gui4selfshelf.Books; import android.app.Activity; import android.database.Cursor; i

我创建了一个由SQLite数据库填充的ListView。 在我的应用程序中,您可以将书籍添加到数据库,并可以在BookDataListActivity中查看图书列表 现在我想实现一个SearchView来过滤书籍。我用了这个视频

但它不起作用。 遵循我的代码。希望你能帮助我

package com.kasutwentyseven.gui4selfshelf.Books;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;

import com.kasutwentyseven.gui4selfshelf.R;

public class BookDataListActivity extends Activity {
public ListView booklistView;
public SearchView searchView;
public SQLiteDatabase sqLiteDatabaseBooks;
public BookDBHelper bookDBHelper;
public Cursor cursor2;
public BookListDataAdapter bookListDataAdapter;

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

    Typeface myTypeface = Typeface.createFromAsset(getAssets(), "Lobster.ttf");

    TextView myTextView = (TextView) findViewById(R.id.text_yourbooks);
    myTextView.setTypeface(myTypeface);

    booklistView = (ListView)findViewById(R.id.book_list_view);
    searchView = (SearchView) findViewById(R.id.search_bar);

    bookListDataAdapter = new BookListDataAdapter(getApplicationContext(),R.layout.row_book_layout);
    booklistView.setAdapter(bookListDataAdapter);

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String text) {
            bookListDataAdapter.getFilter().filter(text);
            return false;
        }
    });

    bookDBHelper = new BookDBHelper(getApplicationContext());
    sqLiteDatabaseBooks = bookDBHelper.getReadableDatabase();
    cursor2 = bookDBHelper.getInformations(sqLiteDatabaseBooks);
    if(cursor2.moveToFirst())
    {
        do{
            String booktitle, bookauthor,bookdate, bookrating, bookshelf;

            booktitle = cursor2.getString(0);
            bookauthor = cursor2.getString(1);
            bookdate = cursor2.getString(2);
            bookrating = cursor2.getString(3);
            bookshelf = cursor2.getString(4);

            BookDataProvider bookDataProvider = new BookDataProvider(booktitle, bookauthor, bookdate, bookrating, bookshelf);
            bookListDataAdapter.add(bookDataProvider);

        }while(cursor2.moveToNext());
    }
    booklistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(getBaseContext(), parent.getItemAtPosition(position) + " is selected", Toast.LENGTH_LONG).show();
        }

    });

}
}

您可以发布
BookListDataAdapter
吗。您需要在那里实现过滤机制。ArrayAdapter具有getFilter方法。但您正在实现可过滤接口。看看@Custom Filter implementation@谢谢你的链接,我会在当天晚些时候尝试实现它。我必须将您的链接的答案实现到我的DatabaseAdapter?我没有让它运行。还有更多的信息@Raghunandan。stackoverflow上有很多样品
package com.kasutwentyseven.gui4selfshelf.Books;

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

import com.kasutwentyseven.gui4selfshelf.R;

import java.util.ArrayList;
import java.util.List;

public class BookListDataAdapter extends ArrayAdapter implements Filterable{

List booklist = new ArrayList();


public BookListDataAdapter(Context context,int resource) {
super(context, resource);
}

static class BookLayoutHandler {
    TextView BOOKTITLE, BOOKAUTHOR, BOOKDATE, BOOKRATING, BOOKSHELF;
}
@Override
public void add (Object object){
super.add(object);
    booklist.add(object);
}

@Override
public int getCount() {
    return booklist.size();
}

@Override
public Object getItem(int position) {

    return booklist.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View row1= convertView;

    BookLayoutHandler bookLayoutHandler;
    if(row1 == null){
        LayoutInflater layoutInflater = (LayoutInflater)    this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row1 = layoutInflater.inflate(R.layout.row_book_layout, parent, false);
        bookLayoutHandler = new BookLayoutHandler();
        bookLayoutHandler.BOOKTITLE = (TextView) row1.findViewById(R.id.text_book_title);
        bookLayoutHandler.BOOKAUTHOR = (TextView) row1.findViewById(R.id.text_book_author);
        bookLayoutHandler.BOOKDATE = (TextView) row1.findViewById(R.id.text_book_date);
        bookLayoutHandler.BOOKRATING = (TextView) row1.findViewById(R.id.text_book_rating);
        bookLayoutHandler.BOOKSHELF = (TextView) row1.findViewById(R.id.text_book_shelf);
        row1.setTag(bookLayoutHandler);
    }else{
        bookLayoutHandler = (BookLayoutHandler) row1.getTag();

    }
    BookDataProvider bookDataProvider = (BookDataProvider) this.getItem(position);
    bookLayoutHandler.BOOKTITLE.setText(bookDataProvider.getBooktitle());
    bookLayoutHandler.BOOKAUTHOR.setText(bookDataProvider.getBookauthor());
    bookLayoutHandler.BOOKDATE.setText(bookDataProvider.getBookdate());
    bookLayoutHandler.BOOKRATING.setText(bookDataProvider.getBookrating());
    bookLayoutHandler.BOOKSHELF.setText(bookDataProvider.getBookshelf());
    return row1;
   }
}