Ich habe Schwierigkeiten, ein eigenes searchView zu erstellen, es von einer Datenbank zu laden und die Daten in Liste anzuzeigen.Wie erstelle ich eine eigene searchView load aus eigener Datenbank?
Jetzt funktioniert meine App, wenn ich den Suchknopf drücke, erscheint eine Suchliste, aber ich kann keine Suche machen. Wenn ich meine Suche in ein searhView schreibe, findet die App meine Liste nicht und filtert sie nicht. Auch wenn ich die Suche absende, kehrt meine App zur mainActivity zurück, die meine Suchliste anzeigt.
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);
}
}
Wie kann ich es beheben? Wie implementiert man die Methode setOnQueryTextListener?
Vielen Dank!
'Was soll ich tun?' ... sollten Sie uns eine minimale Darstellung des Problems zeigen. Sie haben viel zu viel Code eingefügt. –
Das Problem tritt in diesem Zeilencode auf –
cursor = queryPlace.getStudentList(); –