如何从自己的数据库创建自己的searchView加载?

时间:2017-02-14 16:50:48

标签: android sqlite listview searchview

我很难创建自己的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方法?

非常感谢你!

1 个答案:

答案 0 :(得分:0)