为了账号安全,请及时绑定邮箱和手机立即绑定

如何搜索从SQLite数据库填充的回收站视图?

如何搜索从SQLite数据库填充的回收站视图?

慕桂英4014372 2022-08-17 15:32:37
在此应用程序中,用户将输入项目详细信息并将其保存在SQLite数据库中。并在回收站视图中显示已保存的项目。现在我需要添加更多两个功能。首先是从列表项进行搜索。其次是使项目可单击,以便在单击项目时,它将进入详细信息视图活动。这是我的ItemListActivity java类文件package com.example.autoparts;public class ItemListActivity extends AppCompatActivity {    Context context = ItemListActivity.this;    private RecyclerView itemsRecycler;    private ArrayList<Items> listItems;    private SearchView iSearchView;    private SearchManager manager;    //To customize the layout property    private RecyclerView.LayoutManager itemLayoutManager;    //calling the ItemAdapter    private ItemAdapter itemAdapter;    //calling the dbhelper class    PartsDbHelper dbHelper;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_item_list);        //Recycler View for items to display        itemsRecycler = (RecyclerView) findViewById(R.id.items_recycler_view);        dbHelper = new PartsDbHelper(this);        manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);        //set the fixed size of the RecyclerView        itemsRecycler.setHasFixedSize(true);        //setting Linear as layout        itemsRecycler.setLayoutManager(new LinearLayoutManager(this));        itemAdapter = new ItemAdapter(listItems, this);        generateObjects();        getItemsFromSQLite();    }    private void generateObjects() {        listItems = new ArrayList<>();        itemAdapter = new ItemAdapter(listItems, this);        RecyclerView.LayoutManager layoutManager = new         LinearLayoutManager(getApplicationContext());        itemsRecycler.setLayoutManager(layoutManager);        itemsRecycler.setAdapter(itemAdapter);        dbHelper = new PartsDbHelper(this);    }
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

适配器内部:


public class ItemAdapter extends RecyclerView.Adapter<ItemHolder> implements Filterable {



    private Context iContext;


    private List<Items> itemsList = new ArrayList<>();

    private List<Items> itemsListFilter = new ArrayList<>();


    public ItemAdapter(List<Items> itemsList, Context context) {

        this.itemsList = itemsList;

        this.itemsListFilter = itemsList;

        iContext = context;

    }


    @Override

    public Filter getFilter() {

        Filter filter = new Filter() {

            @Override

            protected void publishResults(CharSequence constraint, FilterResults results) {

                itemsList = (List<Items>) results.values;

                notifyDataSetChanged();

            }

            @Override

            protected FilterResults performFiltering(CharSequence constraint) {

                FilterResults results = new FilterResults();

                List<Items> filteredList = new ArrayList<>();

                String searchText = constraint.toString().toLowerCase();

                String[] split = searchText.split(",");

                ArrayList<String> searchGenres = new ArrayList<>(split.length);

                for (String aSplit : split) {

                    // remove spaces

                    String trim = aSplit.trim();

                    // skip empty entries

                    if (trim.length() > 0)

                        searchGenres.add(trim);

                }


                for (Items dataNames : itemsListFilter) {

                    // filter by title

                    if (dataNames.getItem().toLowerCase().trim().contains(searchText)) {

                        filteredList.add(dataNames);

                    }

                }

                results.count = filteredList.size();

                results.values = filteredList;

                return results;

            }


        };

        return filter;

    }




}

在:ItemListActivity


@Override

public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();

    inflater.inflate(R.menu.YOUR_MENU, menu);


    MenuItem item = menu.findItem(R.id.searchMenu);

    SearchView searchView = (SearchView) item.getActionView();

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override

        public boolean onQueryTextChange(String newText) {

            itemAdapter.getFilter().filter(newText);

            return true;

        }

        @Override

        public boolean onQueryTextSubmit(String query) {

            return false;

        }

    });

    return super.onCreateOptionsMenu(menu);

}

菜单


<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item

        android:id="@+id/searchMenu"

        android:icon="@drawable/ic_action_search"

        android:title="@string/search_title"

        app:actionViewClass="androidx.appcompat.widget.SearchView"

        app:showAsAction="collapseActionView|ifRoom" />

</menu>


查看完整回答
反对 回复 2022-08-17
?
慕容708150

TA贡献1831条经验 获得超4个赞

首先添加上面的类 ItemAdapter for intialize;private ArrayList<Items> arraylist;


并将此代码添加到类 ItemAdapter 中:


   public void filterAll( String Qty ) {


            itemsList.clear();


         if (Qty.length() < 0) {

                    itemsList.addAll(arraylist);

                } else {

          for (Items ls : arraylist) {


 if (ls.getqty().contains(qty) ) {


                itemsList.add(ls);


            }


                }

 notifyDataSetChanged();

}

现在在类 ItemListActivity in part onQueryTextChange 中:


itemAdapter.filterall(s.tostring());  


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信