如何通过一件事搜索列表视图中的数据?

用户3474154

现在,当将某些内容输入到editText中时,我的应用程序会过滤列表视图中的数据,但一次只能过滤一件事。我希望它不仅可以按值进行过滤。例如,如果有人键入“鸡肉”,则应使用单词“鸡肉”过滤食谱。但是,如果有人随后输入“晚餐”,我希望它通过“鸡肉”和“晚餐”来过滤食谱。最终,我要使这些值在列表视图上方显示为复选框,以便可以轻松将其删除。

我不知道该怎么做。我刚开始玩循环游戏,但并没有真正到达目的地。

public class SearchActivity extends NavDrawerActivity {


    private DBHandler dbHelper;
    private SimpleCursorAdapter dataAdapter;
    ArrayList<String> filters = new ArrayList<String>();
    //String[] filters;
    FrameLayout frameLayout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main_activity3);

        frameLayout = (FrameLayout) findViewById(R.id.activity_frame);
        // inflate the custom activity layout
        LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View activityView = layoutInflater.inflate(R.layout.activity_main_activity3, null, false);
        // add the custom layout of this activity to frame layout.
        frameLayout.addView(activityView);

        dbHelper = new DBHandler(this, null, null, 1);
        //dbHelper.open();

        //Clean all data
        dbHelper.deleteAllRecipes();
        //Add some data
        dbHelper.insertSomeRecipes();

        //Generate ListView from SQLite Database
        displayListView();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    private void displayListView() {

        final Cursor cursor = dbHelper.fetchAllRecipes();

        // The desired columns to be bound
        String[] columns = new String[]{
                //DBHandler.COLUMN_CODE,
                DBHandler.COLUMN_NAME,
                DBHandler.COLUMN_TYPE,
                DBHandler.COLUMN_INGRED
        };

        // the XML defined views which the data will be bound to
        int[] to = new int[]{
                //R.id.code,
                R.id.name,
                R.id.type,
                R.id.ingredient,
        };

        // create the adapter using the cursor pointing to the desired data
        //as well as the layout information
        dataAdapter = new SimpleCursorAdapter(
                this, R.layout.recipeinfo,
                cursor,
                columns,
                to,
                0);


        ListView listView = (ListView) findViewById(R.id.listView1);
        // Assign adapter to ListView
        listView.setAdapter(dataAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> listView, View view,
                                    int position, long id) {
                // Get the cursor, positioned to the corresponding row in the result set
                Cursor cursor = (Cursor) listView.getItemAtPosition(position);
                String recipeName = cursor.getString(cursor.getColumnIndexOrThrow("name"));
                Intent n = new Intent(getApplicationContext(), RecipeActivity.class);
                //n.putExtra("position", position);
                n.putExtra("recipeName", recipeName);
                startActivity(n);
            }
        });

        //final GridView gridView = (GridView)findViewById(R.id.gridView);
        final TextView tv = (TextView)findViewById(R.id.textView14);
        final EditText myFilter = (EditText) findViewById(R.id.myFilter);
        myFilter.setImeActionLabel("Filter",1);
        myFilter.setPrivateImeOptions("actionUnspecified");
        myFilter.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
                if (id == 1 || id == EditorInfo.IME_NULL) {
                    String filter = textView.getText().toString();
                    dataAdapter.getFilter().filter(filter);
                    filters.add(filter);
                    tv.append(filter);
                    myFilter.setText("");
                }
                return false;
            }
        });

        dataAdapter.setFilterQueryProvider(new FilterQueryProvider() {
            public Cursor runQuery(CharSequence constraint) {
                return dbHelper.fetchRecipesByName(constraint.toString());
            }
        });

    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // Then you start a new Activity via Intent
        Intent intent = new Intent();
        intent.setClass(this, RecipeActivity.class);
        intent.putExtra("position", position);
        // Or / And
        intent.putExtra("id", id);
        startActivity(intent);

    }
}

DBHandler中的fetchRecipesByName

public Cursor fetchRecipesByName(String inputText) throws SQLException {
    SQLiteDatabase mDb = this.getWritableDatabase();
    Log.w(TAG, inputText);
    Cursor mCursor = null;
    if (inputText == null  ||  inputText.length () == 0)  {
        mCursor = mDb.query(SQLITE_TABLE, new String[] {COLUMN_ROWID,
                        COLUMN_NAME, COLUMN_TYPE, COLUMN_INGRED, COLUMN_IMGPATH},
                null, null, null, null, null);

    }
    else {

        mCursor = mDb.query(true, SQLITE_TABLE, new String[] {COLUMN_ROWID,
                        COLUMN_NAME, COLUMN_TYPE, COLUMN_INGRED, COLUMN_IMGPATH},
                COLUMN_NAME + " like '%" + inputText + "%'" + " or " +
                        COLUMN_TYPE + " like '%" + inputText + "%'" + " or " +
                        COLUMN_INGRED + " like '%" + inputText + "%'",
                null, null, null, null, null);
    }
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}
杜尔加达斯S

什么是执行dbHelper.fetchReccipesByName()我认为,到目前为止,它只查询一件事。您应该更改其逻辑并通过此方法实现您的复杂需求(显然,它应该是SQL查询执行)。

最佳做法是,应调用listView.setFilterText()而不是dataAdapter.getFilter().filter(),因为由于DB查询非常耗时,因此该方法应该在辅助线程中运行。如果调用listView.setFilterText(),则框架将处理线程并filter.filter()在辅助线程中进行调用

最后,由于您要搜索的关键字不止一个,但setFilterText()仅接受一个CharSequence参数,因此应将多个关键字编码成单个关键字String(例如用逗号分隔)。在查询时,您可以解码约束以获取关键字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何选择一件事,如果条件为假,则选择另一件事

来自分类Dev

如何打开一件事然后又打开另一件事

来自分类Dev

Windows用户只是一件事

来自分类Dev

制作只做一件事的函数

来自分类Dev

在iPad上显示一件事,在Apple TV上显示另一件事?

来自分类Dev

JLabel将文本从一件事更改为另一件事

来自分类Dev

为什么javascript返回另一件事,而php又返回另一件事?

来自分类Dev

“哪个”报告一件事,实际命令是另一件事

来自分类Dev

如何选择数组中的最后一件事?

来自分类Dev

Javascript:如何判断跨度是否是段落中的第一件事?

来自分类Dev

如何在同一件事上显示字符串和变量?

来自分类Dev

我如何只能从文本文件中读取一件事?

来自分类Dev

如何根据值在不同列中显示一件事的结果

来自分类Dev

该图显示了1件事,但是加载网站时查询的数据显示了另一件事

来自分类Dev

CSS选择器允许一件事,但不允许另一件事?

来自分类Dev

尝试在我的JavaScript代码中理解“ this”(一件事有效,另一件事无效)

来自分类Dev

使用joi进行条件验证:如果属性值大于4,则执行一件事,否则执行另一件事

来自分类Dev

显示器分辨率说一件事,但显示另一件事

来自分类Dev

在正则表达式中,捕获一件事,或另一件事,或两者兼而有之

来自分类Dev

使用 onClick 调用相同的函数适用于一件事而不是另一件事?

来自分类Dev

如何使jButton在第一次单击时做一件事,然后在第二次单击时做另一件事?

来自分类Dev

如何让循环在第一时间做一件事而在其他时间做另一件事

来自分类Dev

如何使用流对不在索引范围内的元素做一件事而对是在范围内的元素做另一件事?

来自分类Dev

如何在 table1.id=table2.id 时打印一件事,而“如果其他”则打印另一件事?

来自分类Dev

快速排序算法-做同一件事的方法有很多?

来自分类Dev

const和constexpr最终会是同一件事吗?

来自分类Dev

“ var”和“ variant”是同一件事吗?

来自分类Dev

首先在HashMap中获得第一件事?

来自分类Dev

延续单子和命令式单子在谈论同一件事吗?

Related 相关文章

  1. 1

    如何选择一件事,如果条件为假,则选择另一件事

  2. 2

    如何打开一件事然后又打开另一件事

  3. 3

    Windows用户只是一件事

  4. 4

    制作只做一件事的函数

  5. 5

    在iPad上显示一件事,在Apple TV上显示另一件事?

  6. 6

    JLabel将文本从一件事更改为另一件事

  7. 7

    为什么javascript返回另一件事,而php又返回另一件事?

  8. 8

    “哪个”报告一件事,实际命令是另一件事

  9. 9

    如何选择数组中的最后一件事?

  10. 10

    Javascript:如何判断跨度是否是段落中的第一件事?

  11. 11

    如何在同一件事上显示字符串和变量?

  12. 12

    我如何只能从文本文件中读取一件事?

  13. 13

    如何根据值在不同列中显示一件事的结果

  14. 14

    该图显示了1件事,但是加载网站时查询的数据显示了另一件事

  15. 15

    CSS选择器允许一件事,但不允许另一件事?

  16. 16

    尝试在我的JavaScript代码中理解“ this”(一件事有效,另一件事无效)

  17. 17

    使用joi进行条件验证:如果属性值大于4,则执行一件事,否则执行另一件事

  18. 18

    显示器分辨率说一件事,但显示另一件事

  19. 19

    在正则表达式中,捕获一件事,或另一件事,或两者兼而有之

  20. 20

    使用 onClick 调用相同的函数适用于一件事而不是另一件事?

  21. 21

    如何使jButton在第一次单击时做一件事,然后在第二次单击时做另一件事?

  22. 22

    如何让循环在第一时间做一件事而在其他时间做另一件事

  23. 23

    如何使用流对不在索引范围内的元素做一件事而对是在范围内的元素做另一件事?

  24. 24

    如何在 table1.id=table2.id 时打印一件事,而“如果其他”则打印另一件事?

  25. 25

    快速排序算法-做同一件事的方法有很多?

  26. 26

    const和constexpr最终会是同一件事吗?

  27. 27

    “ var”和“ variant”是同一件事吗?

  28. 28

    首先在HashMap中获得第一件事?

  29. 29

    延续单子和命令式单子在谈论同一件事吗?

热门标签

归档