我很难创建自己的searchView,从数据库加载它,并将数据显示到列表中。
现在我的应用程序正常工作,当我点击搜索按钮时出现搜索列表但我无法进行任何搜索。当我开始将搜索写入searhView时,应用程序找不到并过滤我的列表,当我提交搜索时,我的应用程序返回到显示我的搜索列表的mainActivity。
MainActivity
public class MainActivity extends AppCompatActivity {
/** Database helper that will provide us access to the database */
private MarluvasDbHelper myDbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myDbHelper = new MarluvasDbHelper(this);
try {
myDbHelper.createDataBase();
} catch (IOException ice) {
throw new Error("Unable to connect");
}
myDbHelper.openDataBase();
// Create and/or open a database to read from it
//SQLiteDatabase db = myDbHelper.getReadableDatabase();
//Toast.makeText(MainActivity.this, "Sucess", Toast.LENGTH_SHORT).show();
//Toast.makeText(MainActivity.this, MarluvasContract.MarluvasEntry.COLUMN_COD, Toast.LENGTH_SHORT).show();
//displayDatabaseInfo();
}
private void displayDatabaseInfo(){
// Create and/or open a database to read from it
SQLiteDatabase db = myDbHelper.getReadableDatabase();
// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
MarluvasContract.MarluvasEntry._ID,
MarluvasContract.MarluvasEntry.COLUMN_MODELO,
MarluvasContract.MarluvasEntry.COLUMN_COR};
// Perform a query on the pets table
Cursor cursor = db.query(
MarluvasContract.MarluvasEntry.TABLE_NAME, // The table to query
projection, // The columns to return
null, // The columns for the WHERE clause
null, // The values for the WHERE clause
null, // Don't group the rows
null, // Don't filter by row groups
null); // The sort order
ListView listView = (ListView) findViewById(R.id.list);
CustomAdapter adapter = new CustomAdapter(this, cursor, 0);
listView.setAdapter(adapter);
}
public Cursor getStudentListByKeyword(String search) {
//Open connection to read only
SQLiteDatabase db = myDbHelper.getReadableDatabase();
// Define a projection that specifies which columns from the database
// you will actually use after this query.
String[] projection = {
MarluvasContract.MarluvasEntry._ID,
MarluvasContract.MarluvasEntry.COLUMN_MODELO,
MarluvasContract.MarluvasEntry.COLUMN_COR};
//String whereClause = MarluvasContract.MarluvasEntry.COLUMN_MODELO+ "=?";
//String [] whereArgs = {" LIKE '%" +search + "%' "};
// Perform a query on the pets table
Cursor cursor = db.query(
MarluvasContract.MarluvasEntry.TABLE_NAME, // The table to query
projection, // The columns to return
null, // The columns for the WHERE clause
null, // The values for the WHERE clause
null, // Don't group the rows
null, // Don't filter by row groups
null); // The sort order
ListView petListView = (ListView) findViewById(R.id.list);
CustomAdapter adapter = new CustomAdapter(this, cursor, 0);
petListView.setAdapter(adapter);
return cursor;
}
@Override
public void onResume(){
super.onResume();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the options menu from XML
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(search).getActionView();
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
getStudentListByKeyword(s);
return false;
}
@Override
public boolean onQueryTextChange(String s) {
getStudentListByKeyword(s);
return false;
}
});
return true;
}
}
CustomAdapter
public class CustomAdapter extends CursorAdapter {
private LayoutInflater mInflater;
public CustomAdapter(Context context, Cursor c, int flags) {
super(context, c, flags);
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.item, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Find fields to populate in inflated template
TextView modelo = (TextView) view.findViewById(R.id.modelo);
TextView cor = (TextView) view.findViewById(R.id.cor);
// Extract properties from cursor
String stringModelo = cursor.getString(cursor.getColumnIndexOrThrow(MarluvasContract.MarluvasEntry.COLUMN_MODELO));
String stringDescr = cursor.getString(cursor.getColumnIndex(MarluvasContract.MarluvasEntry.COLUMN_COR));
// Populate fields with extracted properties
modelo.setText(stringModelo);
cor.setText(stringDescr);
}
}
我该如何解决?如何实现setOnQueryTextListener方法?
非常感谢你!