我是Android的新手,正在开发我的第一个应用程序。它显示一个简单的SQLite数据库,该数据库位于我的Assets文件夹中。活动将在ListView中填充此数据。我在菜单栏中添加了一个搜索按钮,我希望用户能够使用此按钮根据他们输入的文本来过滤ListView。
我试图寻找一些不同的方法来执行此操作,但是我似乎找不到适合此确切问题的解决方案。我尝试了一些其他操作,目前菜单和搜索按钮可以正常工作-只是没有过滤。
这是我目前拥有的。
MainActivity.java
package com.apps.robloxmusic;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView listView;
private List<String> allSongs = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.listView = (ListView) findViewById(R.id.musicList);
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
databaseAccess.open();
allSongs = databaseAccess.getSongs();
databaseAccess.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, allSongs);
this.listView.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.item_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
ArrayList<String> songList = new ArrayList<>();
for (String song : MainActivity.this.allSongs) {
if(song.toLowerCase().contains(newText.toLowerCase())) {
songList.add(song);
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, allSongs);
listView.setAdapter(adapter);
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
}
DatabaseAccess.java
package com.apps.robloxmusic;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
public class DatabaseAccess {
private SQLiteOpenHelper openHelper;
private SQLiteDatabase database;
private static DatabaseAccess instance;
/**
* Private constructor to avoid object creation from outside classes.
*
* @param context
*/
private DatabaseAccess(Context context) {
this.openHelper = new DatabaseOpenHelper(context);
}
/**
* Return a singleton instance of DatabaseAccess.
*
* @param context the Context
* @return the instance of DatabaseAccess
*/
public static DatabaseAccess getInstance(Context context) {
if (instance == null) {
instance = new DatabaseAccess(context);
}
return instance;
}
/**
* Open the database connection.
*/
public void open() {
this.database = openHelper.getWritableDatabase();
}
/**
* Close the database connection.
*/
public void close() {
if (database != null) {
this.database.close();
}
}
/**
* Read all quotes from the database.
*
* @return a List of songs
*/
public List<String> getSongs() {
List<String> list = new ArrayList<>();
Cursor cursor = database.rawQuery("SELECT * FROM [Music_Codes]", null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
list.add(cursor.getString(0));
cursor.moveToNext();
}
cursor.close();
return list;
}
}
此代码没有错误消息,但是它没有按预期过滤ListView。任何帮助和解释将不胜感激!
答案 0 :(得分:0)
在您的onQueryTextChange
中,您是使用相同的数组allSongs
而不是songList
重新创建适配器吗?