要在Android的RecyclerView中搜索过滤后获取原始项目位置,可以按照以下步骤进行操作:
public class CustomFilter extends Filter {
private List- originalList;
private List
- filteredList;
private CustomAdapter adapter;
public CustomFilter(List
- originalList, CustomAdapter adapter) {
this.originalList = originalList;
this.filteredList = new ArrayList<>();
this.adapter = adapter;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
filteredList.clear();
final FilterResults results = new FilterResults();
if (constraint.length() == 0) {
filteredList.addAll(originalList);
} else {
final String filterPattern = constraint.toString().toLowerCase().trim();
for (Item item : originalList) {
if (item.getName().toLowerCase().contains(filterPattern)) {
filteredList.add(item);
}
}
}
results.values = filteredList;
results.count = filteredList.size();
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
adapter.setFilteredList((List
- ) results.values);
adapter.notifyDataSetChanged();
}
}
public class CustomAdapter extends RecyclerView.Adapter {
private List- originalList;
private List
- filteredList;
private CustomFilter filter;
public CustomAdapter(List
- itemList) {
this.originalList = itemList;
this.filteredList = itemList;
}
public void setFilteredList(List
- filteredList) {
this.filteredList = filteredList;
}
// 其他方法和实现省略...
@Override
public int getItemCount() {
return filteredList.size();
}
}
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private CustomAdapter adapter;
private EditText searchEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
searchEditText = findViewById(R.id.searchEditText);
List- itemList = generateItemList(); // 生成原始项目列表
adapter = new CustomAdapter(itemList);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
searchEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s.toString());
}
});
}
}
通过以上步骤,你可以在Android的RecyclerView中实现搜索过滤,并且获得过滤后项目的原始位置。
上一篇:Android - 如何以一种不会在不同屏幕尺寸上破坏布局的方式显示一个带有某些部分的身体图像
下一篇:Android - 如何在API-28上使用startForegroundService()和startForeground()?