Java Android recyclerview搜索筛选器不工作
更新数据但不更改。原因是什么?我尝试了很多方法,但都不管用。无论我写什么,结果都不会改变。名单还是一样。我哪里做错了?我确信适配器已经更新。因为我查过了。问题一定是别的 main活动Java Android recyclerview搜索筛选器不工作,java,android,android-recyclerview,Java,Android,Android Recyclerview,更新数据但不更改。原因是什么?我尝试了很多方法,但都不管用。无论我写什么,结果都不会改变。名单还是一样。我哪里做错了?我确信适配器已经更新。因为我查过了。问题一定是别的 main活动 @Override public boolean onCreateOptionsMenu(final Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu);
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.app_bar_search).getActionView();
searchView.setQueryHint("Search Customer");
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
mAdapter.getFilter().filter(newText);
return true;
}
});
return true;
}
适配器
PlaylistAdapter(Context c,List<M3UItem> list) {
mContext = c;
mInflater = LayoutInflater.from(mContext);
this.mItem = list;
this.list = list;
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
list = mItem;
} else {
List<M3UItem> filteredList = new ArrayList<>();
for (M3UItem row : filteredList) {
// name match condition. this might differ depending on your requirement
// here we are looking for name or phone number match
if (row.getItemName().toLowerCase().contains(charString.toLowerCase()) ) {
filteredList.add(row);
}
}
list = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = list;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
list = (ArrayList<M3UItem>) filterResults.values;
notifyDataSetChanged();
// refresh the list with filtered data
}
};
}
@Override
public void onBindViewHolder(final ItemHolder holder, final int position) {
final M3UItem item = mItem.get(position);
if (item != null) {
holder.update(item);
}
}
临时持有人更新
void update(M3UItem item) {
try {
name.setText(item.getItemName());
int color = generator.getRandomColor();
if (item.getItemIcon().isEmpty()) {
textDrawable = TextDrawable.builder()
.buildRoundRect(String.valueOf(item.getItemName().charAt(0)), color, 100);
cImg.setImageDrawable(textDrawable);
} else {
if (Utils.getInstance().isNetworkAvailable(mContext)) {
Glide.with(mContext).load(item.getItemIcon()).into(cImg);
} else {
textDrawable = TextDrawable.builder()
.buildRoundRect(String.valueOf(item.getItemName().charAt(0)), color, 100);
cImg.setImageDrawable(textDrawable);
}
}
} catch (Exception ignored) {
}
}
main活动加载项:
@Override
protected Boolean doInBackground(String... strings) {
try { //new FileInputStream (new File(name)
is = new FileInputStream(new File(strings[0])); // if u r trying to open file from asstes InputStream is = getassets.open(); InputStream
final M3UPlaylist playlist = parser.parseFile(is);
runOnUiThread(new Runnable() {
@Override
public void run() {
// Stuff that updates the UI
mAdapter.update(playlist.getPlaylistItems());
mAdapter.notifyDataSetChanged();
}
});
return true;
} catch (Exception e) {
Log.d("Google2", "_loadFile: " + e.toString());
return false;
}
}
问题在于onBindViewHolder和getItemCount在适配器类中尝试此更改
@Override
public void onBindViewHolder(final ItemHolder holder, final int position) {
final M3UItem item = list.get(position);
if (item != null) {
holder.update(item);
}
}
@Override
public int getItemCount() {
return list.size();
}
你还需要改变你的过滤代码并像这样修改它
List<M3UItem> filteredList = new ArrayList<>();
for (M3UItem row : mItem) {
// name match condition. this might differ depending on your requirement
// here we are looking for name or phone number match
if (row.getItemName().toLowerCase().contains(charString.toLowerCase()) ) {
filteredList.add(row);
}
}
List filteredList=new ArrayList();
用于(M3UItem行:mItem){
//名称匹配条件。这可能因您的要求而异
//在这里,我们正在寻找姓名或电话号码匹配
if(row.getItemName().toLowerCase().contains(charString.toLowerCase())){
filteredList.add(行);
}
}
请发送适配器的onBindViewHolder(ViewHolder holder,int-position)和getItemCount()方法。请选中编辑。是否已通过此方法回答?我已经用过了,但它没有。但我真正的列表是“mItem”。你的RecyclerView不会更改其项目或根本不显示任何内容?RecyclerView不会更改其项目项目项目确实是你真正的列表,但我们需要筛选一些项目,然后在Recycler中显示这些筛选的项目,我们必须使用另一个代表这些过滤项的列表,我想这就是这个.list的作用所在。我尝试了一下,但再次失败。İtems未加载n且RecyclerView为空。