【发布时间】:2021-07-31 10:55:22
【问题描述】:
谁能帮帮我。我在过滤回收站视图时遇到问题,我的应用顶部有一个搜索视图,我只想过滤三轮车号码。我有 4 个字符串数组列表,每个都有值。问题是我不知道如何只过滤三轮车号码我尝试了很多东西但我真的不知道,你能帮我吗?这是我的驱动程序列表适配器代码
public class DriverListAdapter extends RecyclerView.Adapter<DriverListAdapter.ViewHolder> implements Filterable{
private ArrayList<String> mNickNames = new ArrayList<>();
private ArrayList<String> mPhoneNumber = new ArrayList<>();
private ArrayList<String> mTricycleNumber = new ArrayList<>();
private ArrayList<String> mImageUrls = new ArrayList<>();
private Context context;
private List<String> mNickNamesAll;
private List<String> mPhoneNumberAll;
private List<String> mTricycleNumberAll;
private List<String> mImageUrlsAll;
public DriverListAdapter(BookingActivity bookingActivity, ArrayList<String> nickNames, ArrayList<String> phoneNumbers, ArrayList<String> mTricycleNumber, ArrayList<String> images){
//this.driverList = driverList;
this.context = bookingActivity;
this.mNickNames = nickNames;
this.mPhoneNumber = phoneNumbers;
this.mTricycleNumber = mTricycleNumber;
this.mImageUrls = images;
//this.mUserID = userId;
mNickNamesAll = new ArrayList<>(nickNames);
mPhoneNumberAll = new ArrayList<>(phoneNumbers);
mTricycleNumberAll = new ArrayList<>(mTricycleNumber);
mImageUrlsAll = new ArrayList<>(images);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//return null;
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview,parent,false);
//return new ViewHolder(view);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull DriverListAdapter.ViewHolder holder, final int position) {
Glide.with(context)
.asBitmap()
.load(mImageUrls.get(position))
.into(holder.imageView);
holder.tvNickName.setText(mNickNames.get(position));
holder.tvPhoneNumber.setText(mPhoneNumber.get(position));
holder.tvTricycleNumber.setText(mTricycleNumber.get(position));
holder.tvLine.setText("_____________________________________");
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bookDialog(mTricycleNumber.get(position), mNickNames.get(position));
}
});
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Welcome to Driver Profile", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context, DriverProfileActivity.class);
intent.putExtra("image_url", mImageUrls.get(position));
intent.putExtra("tricycle_number", mTricycleNumber.get(position));
context.startActivity(intent);
//finish();
}
});
}
@Override
public int getItemCount() {
return mNickNames.size();
}
@Override
public Filter getFilter() {
return filter;
}
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<String> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(mNickNamesAll);
filteredList.addAll(mPhoneNumberAll);
filteredList.addAll(mTricycleNumberAll);
filteredList.addAll(mImageUrlsAll);
} else {
for (String nicknames: mNickNamesAll) {
if (nicknames.toLowerCase().contains(constraint.toString().toLowerCase())) {
filteredList.add(nicknames);
}
}
for (String phonenumbers: mPhoneNumberAll){
if (phonenumbers.toLowerCase().contains(constraint.toString().toLowerCase())) {
filteredList.add(phonenumbers);
}
}
for (String tricyclenumber: mTricycleNumberAll){
if (tricyclenumber.toLowerCase().contains(constraint.toString().toLowerCase())) {
filteredList.add(tricyclenumber);
}
}
for (String imageUrl: mImageUrlsAll){
if (imageUrl.toLowerCase().contains(constraint.toString().toLowerCase())) {
filteredList.add(imageUrl);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mTricycleNumber.clear();
mNickNames.clear();
mPhoneNumber.clear();
mImageUrls.clear();
mNickNames.addAll((Collection<? extends String>) results.values);
mPhoneNumber.addAll((Collection<? extends String>) results.values);
mTricycleNumber.addAll((Collection<? extends String>) results.values);
mImageUrls.addAll((Collection<? extends String>) results.values);
notifyDataSetChanged();
}
};
public class ViewHolder extends RecyclerView.ViewHolder{
private CircleImageView imageView;
private TextView tvNickName;
private TextView tvPhoneNumber;
private TextView tvTricycleNumber;
private TextView tvLine;
public ViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageview);
tvNickName = itemView.findViewById(R.id.tv_nick_name);
tvPhoneNumber = itemView.findViewById(R.id.tv_phone_number);
tvTricycleNumber = itemView.findViewById(R.id.tv_tricycle_number);
tvLine = itemView.findViewById(R.id.tv_line);
}
}
private void bookDialog(final String tricyclenumber, final String tricyclenickname){
AlertDialog.Builder builder = new AlertDialog.Builder(
context
);
builder.setIcon(R.drawable.ic_baseline_check_circle_24);
builder.setTitle("Book Tricycle:");
builder.setMessage("Tricycle Number " + tricyclenumber + " You What To Book This Tricycle?");
builder.setCancelable(false);
builder.setPositiveButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//firestore insert data!
Toast.makeText(context, "Welcome to Book Transaction Activity", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context, BookTransactionActivity.class);
intent.putExtra("tricycle_number", tricyclenumber);
intent.putExtra("tricycle_nickname", tricyclenickname);
context.startActivity(intent);
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}}
这是搜索视图的代码。
svSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
driverListAdapter.getFilter().filter(newText);
return false;
}
});
【问题讨论】:
标签: android android-recyclerview searchview