I'm having hard trouble to create a own searchView, load it from a database, and show the data into list.
Now my app is working, when I hit the search button appears a search list but I am not be able to do any search. When I start to write my search into a searhView the the app is not finding and filtering my list, also when I submmit the search my apps returns to the mainActivity showing my search list.
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);
}
}
How can I fix it? How to implement the setOnQueryTextListener method?
Thank you so much!