Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Listview中的SearchView筛选器模式不工作_Android_Listview_Searchview_Android Database - Fatal编程技术网

Android Listview中的SearchView筛选器模式不工作

Android Listview中的SearchView筛选器模式不工作,android,listview,searchview,android-database,Android,Listview,Searchview,Android Database,我的主要活动有一个列表视图和一个搜索视图。列表视图显示数据库中的所有条目。它工作正常(从我的数据库加载所有单词/字符串)。但问题在于SearchView。当我输入文本时,它不会在Listview中过滤字符串/单词。所以,它什么也没发生,我也不知道为什么 以下三类:主活动、wordactivity和数据库。我需要一些帮助。我是个新手 BancoDictionary(主要活动) 公共类BancoDictionary扩展活动{ 公共静态最终字符串PREFS\u NAME=“MyPrefsFile1”;

我的主要活动有一个列表视图和一个搜索视图。列表视图显示数据库中的所有条目。它工作正常(从我的数据库加载所有单词/字符串)。但问题在于
SearchView
。当我输入文本时,它不会在Listview中过滤字符串/单词。所以,它什么也没发生,我也不知道为什么

以下三类:主活动、wordactivity和数据库。我需要一些帮助。我是个新手

BancoDictionary(主要活动)

公共类BancoDictionary扩展活动{
公共静态最终字符串PREFS\u NAME=“MyPrefsFile1”;
列表视图;
SearchView sv;
阵列适配器;
ArrayList allWordDefinitions=新建ArrayList();
字典数据库字典数据库;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mListView=(ListView)findViewById(R.id.list);
sv=(SearchView)findviewbyd(R.id.SearchView 1);
adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,allWordDefinitions);
mListView.setAdapter(适配器);
sv.setOnQueryTextListener(新的OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串文本){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔值onQueryTextChange(字符串文本){
adapter.getFilter().filter(文本);
返回false;
}
});
mListView.setTextFilterEnabled(true);
DictionaryDatabase=新DictionaryDatabase(此);
allWordDefinitions=DictionaryDatabase.getAllWords();
Collections.sort(allWordDefinitions,newcustomcomparator());
setAdapter(新的BaseAdapter(){
@凌驾
公共视图getView(内部位置、视图视图、视图组父视图){
如果(视图==null){
视图=GetLayoutFlater()。充气(R.layout.list_项,父项,false);
}
TextView TextView=(TextView)view.findViewById(R.id.listItemTextView);
setText(allWordDefinitions.get(position.word));
返回视图;
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回null;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回allWordDefinitions.size();
}
});
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(适配器视图arg0、视图视图、内部位置、,
长arg3){
意向意向=新意向(BancoDictionary.this,WordDefinitionDetailActivity.class);
intent.putExtra(“word”,allWordDefinitions.get(position.word);
intent.putExtra(“定义”,allWordDefinitions.get(position.definition);
星触觉(意向);
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回super.onCreateOptions菜单(菜单);
}
公共类CustomComparator实现Comparator{
@凌驾
公共整数比较(字定义p1,字定义p2){
返回p1.word.compareTignoreCase(p2.word);
}
}
}
词定义

public class WordDefinition {
String word,definition;

public WordDefinition(String word,ArrayList<String> alldefinition) {
    this.word=word;

    StringBuilder stringBuilder=new StringBuilder();
    for (String string : alldefinition) {
        stringBuilder.append(string);
    }       
    this.definition=stringBuilder.toString();

}

public WordDefinition(String word,String alldefinition) {
    this.word=word;     
    this.definition=alldefinition;

}


  }
公共类WordDefinition{
字符串词,定义;
public WordDefinition(字符串词,ArrayList alldefinition){
这个单词=单词;
StringBuilder StringBuilder=新的StringBuilder();
for(字符串:alldefinition){
追加(字符串);
}       
this.definition=stringBuilder.toString();
}
public WordDefinition(String-word、String-alldefinition){
这个单词=单词;
this.definition=alldefinition;
}
}
字典数据库

public class DictionaryDatabase {
private static final String TAG = "DictionaryDatabase";

public static final String KEY_WORD = SearchManager.SUGGEST_COLUMN_TEXT_1;
public static final String KEY_DEFINITION = SearchManager.SUGGEST_COLUMN_TEXT_2;

private static final String DATABASE_NAME = "dictionary";
private static final String FTS_VIRTUAL_TABLE = "FTSdictionary";
private static final int DATABASE_VERSION = 2;

private final DictionaryOpenHelper mDatabaseOpenHelper;
private static final HashMap<String,String> mColumnMap = buildColumnMap();

public DictionaryDatabase(Context context) {
    mDatabaseOpenHelper = new DictionaryOpenHelper(context);
}

private static HashMap<String,String> buildColumnMap() {
    HashMap<String,String> map = new HashMap<String,String>();
    map.put(KEY_WORD, KEY_WORD);
    map.put(KEY_DEFINITION, KEY_DEFINITION);
    map.put(BaseColumns._ID, "rowid AS " +
            BaseColumns._ID);
    map.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, "rowid AS " +
            SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID);
    map.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, "rowid AS " +
            SearchManager.SUGGEST_COLUMN_SHORTCUT_ID);
    return map;
}




public Cursor getWord(String rowId, String[] columns) {
    String selection = "rowid = ?";
    String[] selectionArgs = new String[] {rowId};

    return query(selection, selectionArgs, columns);

}

public Cursor getWordMatches(String query, String[] columns) {
    String selection = KEY_WORD + " MATCH ?";
    String[] selectionArgs = new String[] {query+"*"};

    return query(selection, selectionArgs, columns);

}

private Cursor query(String selection, String[] selectionArgs, String[] columns) {

    SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
    builder.setTables(FTS_VIRTUAL_TABLE);
    builder.setProjectionMap(mColumnMap);

    Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(),
            columns, selection, selectionArgs, null, null, KEY_WORD + " COLLATE NOCASE ASC");

    if (cursor == null) {
        return null;
    } else if (!cursor.moveToFirst()) {
        cursor.close();
        return null;
    }
    return cursor;
}

private static class DictionaryOpenHelper extends SQLiteOpenHelper {

    private final Context mHelperContext;
    private SQLiteDatabase mDatabase;

    private static final String FTS_TABLE_CREATE =
                "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE +
                " USING fts3 (" +
                KEY_WORD + ", " +
                KEY_DEFINITION + ");";



    DictionaryOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        mHelperContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        mDatabase = db;
        mDatabase.execSQL(FTS_TABLE_CREATE);
        loadDictionary();
    }



    private void loadDictionary() {
        new Thread(new Runnable() {
            public void run() {
                try {
                    loadWords();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }).start();
    }

    private void loadWords() throws IOException {
        Log.d(TAG, "Loading words...");
        final Resources URL = mHelperContext.getResources();
        InputStream input = new URL("http://example.com.br/example.txt").openStream();


        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        try {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] strings = TextUtils.split(line, "//");
                if (strings.length < 2) continue;
                long id = addWord(strings[0].trim(), strings[1].trim());
                if (id < 0) {
                    Log.e(TAG, "unable to add word: " + strings[0].trim());
                }
            }
        } finally {
            reader.close();
        }
        Log.d(TAG, "DONE loading words.");
    }


    public long addWord(String word, String definition) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_WORD, word);
        initialValues.put(KEY_DEFINITION, definition);

        return mDatabase.insert(FTS_VIRTUAL_TABLE, null, initialValues);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + FTS_VIRTUAL_TABLE);
        onCreate(db);
    }
}

public long insertData(WordDefinition wordDefinition) {
    SQLiteDatabase database=mDatabaseOpenHelper.getWritableDatabase();
    ContentValues values=new ContentValues();

    values.put(KEY_WORD, wordDefinition.word);
    values.put(KEY_DEFINITION, wordDefinition.definition);

    return database.insert(FTS_VIRTUAL_TABLE, null, values);        

}

   public long updateData(WordDefinition wordDefinition) {
    SQLiteDatabase database=mDatabaseOpenHelper.getWritableDatabase();
    ContentValues values=new ContentValues();

    values.put(KEY_WORD, wordDefinition.word);
    values.put(KEY_DEFINITION, wordDefinition.definition);

    return database.update(FTS_VIRTUAL_TABLE, values, KEY_WORD+" =?", new String[]{wordDefinition.word});   

}

public void deleteData(WordDefinition wordDefinition) {
    SQLiteDatabase database=mDatabaseOpenHelper.getWritableDatabase();
    String queryString="DELETE FROM "+FTS_VIRTUAL_TABLE+" WHERE "+KEY_WORD+" = '"+wordDefinition.word+"'";

    database.execSQL(queryString);
}


public ArrayList<WordDefinition> getAllWords() {
ArrayList<WordDefinition> arrayList=new ArrayList<WordDefinition>();
SQLiteDatabase database=mDatabaseOpenHelper.getReadableDatabase();

String selectAllQueryString="SELECT * FROM "+FTS_VIRTUAL_TABLE;
Cursor cursor=database.rawQuery(selectAllQueryString, null);

if (cursor.moveToFirst()) {
    do {            
        WordDefinition wordDefinition=new WordDefinition(cursor.getString(cursor.getColumnIndex(KEY_WORD)), cursor.getString(cursor.getColumnIndex(KEY_DEFINITION)));
        arrayList.add(wordDefinition);              
    } while (cursor.moveToNext());          
}   
return arrayList;
}

public WordDefinition getWordDefinition(String word) {
SQLiteDatabase database=mDatabaseOpenHelper.getReadableDatabase();
WordDefinition wordDefinition=null;

String selectQueryString="SELECT * FROM "+FTS_VIRTUAL_TABLE+ " WHERE "+KEY_WORD+" = '"+word+ "'";
Cursor cursor=database.rawQuery(selectQueryString, null);

if (cursor.moveToFirst()) {
    wordDefinition=new WordDefinition(cursor.getString(cursor.getColumnIndex(KEY_WORD)), cursor.getString(cursor.getColumnIndex(KEY_DEFINITION)));

}   

return wordDefinition;

}

public WordDefinition getWordDefinition(long id) {
SQLiteDatabase database=mDatabaseOpenHelper.getReadableDatabase();
WordDefinition wordDefinition=null;

String selectQueryString="SELECT * FROM "+FTS_VIRTUAL_TABLE+ " WHERE "+BaseColumns._ID+" = '"+id+ "'";
Cursor cursor=database.rawQuery(selectQueryString, null);

if (cursor.moveToFirst()) {
    wordDefinition=new WordDefinition(cursor.getString(cursor.getColumnIndex(KEY_WORD)), cursor.getString(cursor.getColumnIndex(KEY_DEFINITION)));

}   

return wordDefinition;

   }


 public void initializeDatabaseFortheFirstTime(ArrayList<WordDefinition> wordDefinitions) {
SQLiteDatabase database=mDatabaseOpenHelper.getWritableDatabase();
database.execSQL("BEGIN");

ContentValues contentValues=new ContentValues();

for (WordDefinition wordDefinition : wordDefinitions) {
    contentValues.put(KEY_WORD, wordDefinition.word);
    contentValues.put(KEY_DEFINITION, wordDefinition.definition);           
    database.insert(FTS_VIRTUAL_TABLE, null, contentValues);
}
database.execSQL("COMMIT");

}

  }
公共类字典数据库{
私有静态最终字符串标记=“DictionaryDatabase”;
public static final String KEY\u WORD=SearchManager.SUGGEST\u COLUMN\u TEXT\u 1;
public static final String KEY\u DEFINITION=SearchManager.SUGGEST\u COLUMN\u TEXT\u 2;
私有静态最终字符串数据库\u NAME=“dictionary”;
私有静态最终字符串FTS_VIRTUAL_TABLE=“ftsdirectionary”;
私有静态最终int数据库_VERSION=2;
私有最终字典OpenHelper mDatabaseOpenHelper;
私有静态最终HashMap mColumnMap=buildColumnMap();
公共字典数据库(上下文){
mDatabaseOpenHelper=新字典OpenHelper(上下文);
}
私有静态HashMap buildColumnMap(){
HashMap=newHashMap();
map.put(关键字,关键字);
map.put(键定义,键定义);
map.put(BaseColumns.\u ID,“rowid AS”+
基本列。_ID);
map.put(SearchManager.SUGGEST\u COLUMN\u INTENT\u DATA\u ID,“rowid AS”+
SearchManager.SUGGEST\u COLUMN\u INTENT\u DATA\u ID);
map.put(SearchManager.SUGGEST\u COLUMN\u SHORTCUT\u ID,“rowid AS”+
SearchManager.SUGGEST\u COLUMN\u SHORTCUT\u ID);
返回图;
}
公共游标getWord(字符串rowId,字符串[]列){
字符串选择=“rowid=?”;
字符串[]selectionArgs=新字符串[]{rowId};
返回查询(selection、selectionArgs、columns);
}
公共游标getWordMatches(字符串查询,字符串[]列){
字符串选择=关键字+匹配;
字符串[]selectionArgs=新字符串[]{query+“*”};
返回查询(selection、selectionArgs、columns);
}
专用游标查询(字符串选择、字符串[]selectionArgs、字符串[]列){
SQLiteQueryBuilder=新SQLiteQueryBuilder();
可设置表(FTS_虚拟_表);
setProjectionMap(mColumnMap);
Cursor Cursor=builder.query(mDatabaseOpenHelper.getReadableDatabase(),
public class DictionaryDatabase {
private static final String TAG = "DictionaryDatabase";

public static final String KEY_WORD = SearchManager.SUGGEST_COLUMN_TEXT_1;
public static final String KEY_DEFINITION = SearchManager.SUGGEST_COLUMN_TEXT_2;

private static final String DATABASE_NAME = "dictionary";
private static final String FTS_VIRTUAL_TABLE = "FTSdictionary";
private static final int DATABASE_VERSION = 2;

private final DictionaryOpenHelper mDatabaseOpenHelper;
private static final HashMap<String,String> mColumnMap = buildColumnMap();

public DictionaryDatabase(Context context) {
    mDatabaseOpenHelper = new DictionaryOpenHelper(context);
}

private static HashMap<String,String> buildColumnMap() {
    HashMap<String,String> map = new HashMap<String,String>();
    map.put(KEY_WORD, KEY_WORD);
    map.put(KEY_DEFINITION, KEY_DEFINITION);
    map.put(BaseColumns._ID, "rowid AS " +
            BaseColumns._ID);
    map.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, "rowid AS " +
            SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID);
    map.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, "rowid AS " +
            SearchManager.SUGGEST_COLUMN_SHORTCUT_ID);
    return map;
}




public Cursor getWord(String rowId, String[] columns) {
    String selection = "rowid = ?";
    String[] selectionArgs = new String[] {rowId};

    return query(selection, selectionArgs, columns);

}

public Cursor getWordMatches(String query, String[] columns) {
    String selection = KEY_WORD + " MATCH ?";
    String[] selectionArgs = new String[] {query+"*"};

    return query(selection, selectionArgs, columns);

}

private Cursor query(String selection, String[] selectionArgs, String[] columns) {

    SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
    builder.setTables(FTS_VIRTUAL_TABLE);
    builder.setProjectionMap(mColumnMap);

    Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(),
            columns, selection, selectionArgs, null, null, KEY_WORD + " COLLATE NOCASE ASC");

    if (cursor == null) {
        return null;
    } else if (!cursor.moveToFirst()) {
        cursor.close();
        return null;
    }
    return cursor;
}

private static class DictionaryOpenHelper extends SQLiteOpenHelper {

    private final Context mHelperContext;
    private SQLiteDatabase mDatabase;

    private static final String FTS_TABLE_CREATE =
                "CREATE VIRTUAL TABLE " + FTS_VIRTUAL_TABLE +
                " USING fts3 (" +
                KEY_WORD + ", " +
                KEY_DEFINITION + ");";



    DictionaryOpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        mHelperContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        mDatabase = db;
        mDatabase.execSQL(FTS_TABLE_CREATE);
        loadDictionary();
    }



    private void loadDictionary() {
        new Thread(new Runnable() {
            public void run() {
                try {
                    loadWords();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }).start();
    }

    private void loadWords() throws IOException {
        Log.d(TAG, "Loading words...");
        final Resources URL = mHelperContext.getResources();
        InputStream input = new URL("http://example.com.br/example.txt").openStream();


        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        try {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] strings = TextUtils.split(line, "//");
                if (strings.length < 2) continue;
                long id = addWord(strings[0].trim(), strings[1].trim());
                if (id < 0) {
                    Log.e(TAG, "unable to add word: " + strings[0].trim());
                }
            }
        } finally {
            reader.close();
        }
        Log.d(TAG, "DONE loading words.");
    }


    public long addWord(String word, String definition) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_WORD, word);
        initialValues.put(KEY_DEFINITION, definition);

        return mDatabase.insert(FTS_VIRTUAL_TABLE, null, initialValues);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + FTS_VIRTUAL_TABLE);
        onCreate(db);
    }
}

public long insertData(WordDefinition wordDefinition) {
    SQLiteDatabase database=mDatabaseOpenHelper.getWritableDatabase();
    ContentValues values=new ContentValues();

    values.put(KEY_WORD, wordDefinition.word);
    values.put(KEY_DEFINITION, wordDefinition.definition);

    return database.insert(FTS_VIRTUAL_TABLE, null, values);        

}

   public long updateData(WordDefinition wordDefinition) {
    SQLiteDatabase database=mDatabaseOpenHelper.getWritableDatabase();
    ContentValues values=new ContentValues();

    values.put(KEY_WORD, wordDefinition.word);
    values.put(KEY_DEFINITION, wordDefinition.definition);

    return database.update(FTS_VIRTUAL_TABLE, values, KEY_WORD+" =?", new String[]{wordDefinition.word});   

}

public void deleteData(WordDefinition wordDefinition) {
    SQLiteDatabase database=mDatabaseOpenHelper.getWritableDatabase();
    String queryString="DELETE FROM "+FTS_VIRTUAL_TABLE+" WHERE "+KEY_WORD+" = '"+wordDefinition.word+"'";

    database.execSQL(queryString);
}


public ArrayList<WordDefinition> getAllWords() {
ArrayList<WordDefinition> arrayList=new ArrayList<WordDefinition>();
SQLiteDatabase database=mDatabaseOpenHelper.getReadableDatabase();

String selectAllQueryString="SELECT * FROM "+FTS_VIRTUAL_TABLE;
Cursor cursor=database.rawQuery(selectAllQueryString, null);

if (cursor.moveToFirst()) {
    do {            
        WordDefinition wordDefinition=new WordDefinition(cursor.getString(cursor.getColumnIndex(KEY_WORD)), cursor.getString(cursor.getColumnIndex(KEY_DEFINITION)));
        arrayList.add(wordDefinition);              
    } while (cursor.moveToNext());          
}   
return arrayList;
}

public WordDefinition getWordDefinition(String word) {
SQLiteDatabase database=mDatabaseOpenHelper.getReadableDatabase();
WordDefinition wordDefinition=null;

String selectQueryString="SELECT * FROM "+FTS_VIRTUAL_TABLE+ " WHERE "+KEY_WORD+" = '"+word+ "'";
Cursor cursor=database.rawQuery(selectQueryString, null);

if (cursor.moveToFirst()) {
    wordDefinition=new WordDefinition(cursor.getString(cursor.getColumnIndex(KEY_WORD)), cursor.getString(cursor.getColumnIndex(KEY_DEFINITION)));

}   

return wordDefinition;

}

public WordDefinition getWordDefinition(long id) {
SQLiteDatabase database=mDatabaseOpenHelper.getReadableDatabase();
WordDefinition wordDefinition=null;

String selectQueryString="SELECT * FROM "+FTS_VIRTUAL_TABLE+ " WHERE "+BaseColumns._ID+" = '"+id+ "'";
Cursor cursor=database.rawQuery(selectQueryString, null);

if (cursor.moveToFirst()) {
    wordDefinition=new WordDefinition(cursor.getString(cursor.getColumnIndex(KEY_WORD)), cursor.getString(cursor.getColumnIndex(KEY_DEFINITION)));

}   

return wordDefinition;

   }


 public void initializeDatabaseFortheFirstTime(ArrayList<WordDefinition> wordDefinitions) {
SQLiteDatabase database=mDatabaseOpenHelper.getWritableDatabase();
database.execSQL("BEGIN");

ContentValues contentValues=new ContentValues();

for (WordDefinition wordDefinition : wordDefinitions) {
    contentValues.put(KEY_WORD, wordDefinition.word);
    contentValues.put(KEY_DEFINITION, wordDefinition.definition);           
    database.insert(FTS_VIRTUAL_TABLE, null, contentValues);
}
database.execSQL("COMMIT");

}

  }