在数据库 SQLite Android Studio 上搜索时突出显示颜色 TexView

highlight color texview when searching on database sqlite android studio

提问人:Serizawa 提问时间:11/10/2023 更新时间:11/10/2023 访问量:22

问:

谁能帮我,我正在开发离线词典应用程序。 搜索工作,但我想在用户搜索某些单词时在 texview 中添加高亮颜色。

列表文章.java

DataBaseHelper mDBHelper;

filterid = getIntent().getIntExtra("id_filter", 0);

............
  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.articles, menu); 

        MenuItem search = menu.findItem(R.id.action_search);
        final SearchView searchView = (SearchView) search.getActionView();


        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String newText) {

             
             adapterArticlesFilterByName(newText, filterid);

             //error GET VALUE HERE
             artikel.setFilter(newText, filterid);
                  
                }

                return false;
            }

          
            @Override
            public boolean onQueryTextChange(String newText) {


                return false;
            }
        });
    }    

public void adapterArticlesFilterByName(String name, int filterid) {
        mItemList.clear();
        mItemList.addAll(mDBHelper.getListItemFilterByTitle(name, filterid));
        if (mItemList.size() != 0) {
            noArticles.setVisibility(View.GONE);
            adapterRV = new ListArticleAdapter(this, mItemList);
            adapterRV.setClickListener(this, this);

             RVItems.setAdapter(adapterRV);
        } else {
            currentListCategorie = false;
            noArticles.setVisibility(View.VISIBLE);
        }
    }

一些功能:DataBaseHelper.java

..............
public List<ItemListview> getListItemFilterByTitle(String title, int filterid) {
        ItemListview item = null;
        List<ItemListview> itemList = new ArrayList<>();
        openDatabase();
        Cursor cursor = mDatabase.rawQuery("SELECT * FROM tbsubcategory where (deskripsi like '%"+title+"%' )  limit 500 ", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            item = new ItemListview(cursor.getInt(0), cursor.getString(1), cursor.getString(2),
                    cursor.getString(3), cursor.getInt(4));
            itemList.add(item);
            cursor.moveToNext();
        }
        cursor.close();
        closeDatabase();

        return itemList;
    }

.............

modul : Itemlistview.java

............


    public ItemListview(int id,  String icon, String judulnya, String artinya, int k) {
        super();
        this.id=id;
        this.icon = icon;
        this.judulnya = judulnya;
        this.artinya = artinya;;
        this.k = k;

    }

        public String getJudulnya() {
        return judulnya;
    }
    public String getArtinya() {
        return artinya;
    }
..........

列表文章适配器 .java


    private List<Object> mData = Collections.emptyList();
    private LayoutInflater mInflater;
    private ItemClickListener mClickListener, klikSuara;
    Context mContext;
    JSONObject json_obj;
    View menuItemLayoutView;
    String searchText;

........

// ERROR THIS T_T
 public void setFilter(String searchText, int idnya) {
        this.searchText = searchText;
       

    }


@Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //menuItemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view_artikel, parent, false) ;
        menuItemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view_artikel, parent, false) ;
        return new MenuItemViewHolder(menuItemLayoutView);


    }
@Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        final MenuItemViewHolder menuItemHolder = (MenuItemViewHolder) holder;
         menuItemHolder.kelasnya.setText(((ItemListview)mData.get(position)).getArtinya().trim());
         menuItemHolder.title.setText(((ItemListview)mData.get(position)).getJudulnya().trim());



//MODE HIGHLIGHT TEXT HERE ... and error!!

            String tvt = ((ItemListview)mData.get(position)).getArtinya();
            int ofe = tvt.indexOf(searchText, 0);
            Spannable wordToSpan = new SpannableString(((ItemListview)mData.get(position)).getArtinya());
            for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
                ofe = tvt.indexOf(searchText, ofs);
                if (ofe == -1)
                    break;
                else {
                    // set color here
                    wordToSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), ofe, ofe + searchText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    menuItemHolder.kelasnya.setText(wordToSpan, TextView.BufferType.SPANNABLE);
                }
            }


    }

错误 logcat :FATAL EXCEPTION: main Process: net.icdx.english.offlline, PID: 18052 java.lang.NullPointerException: Attempt to invoke virtual method 'void net.icdx.english.offlline.adapter.ListArticleAdapter.setFilter(java.lang.String, int)' on a null object reference at net.icdx.english.offlline.daftarlist.ListArticles$5.onQueryTextSubmit(ListArticles.java:474)

我的期望是,如果用户搜索词“er”,那么像这样:

“呃”

java 搜索 android-recyclerview textview

评论

0赞 i_A_mok 11/11/2023
这可能会有所帮助:stackoverflow.com/questions/67257217/...
0赞 Armin Taghavizad 11/13/2023
这不是你问问题的方式。你应该处理你的代码,并把你到目前为止所做的事情放在这里。阅读帮助中心主题,详细了解您可以提出哪些问题以及必须避免哪些类型的问题。帮助中心我应该避免问什么类型的问题?我可以在这里问哪些话题?.社区一定会很乐意帮助您解决正确的问题

答: 暂无答案