提问人:Serizawa 提问时间:11/10/2023 更新时间:11/10/2023 访问量:22
在数据库 SQLite Android Studio 上搜索时突出显示颜色 TexView
highlight color texview when searching on database sqlite android studio
问:
谁能帮我,我正在开发离线词典应用程序。 搜索工作,但我想在用户搜索某些单词时在 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”,那么像这样:
答: 暂无答案
评论