I am developing news app and I have implemented filter in my RecyclerView.Adapter
but when I run the code I am getting following exception
Process: com.example.recycleviewsearchintent, PID: 27421
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at
below my adapter class:
public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.UsersAdapterVh> implements Filterable {
private List<UserModel> userModelList;
private Context context;
private SelectedUser selectedUser;
private List<UserModel> getUserModelListFiltered;
public UsersAdapter(List<UserModel> userModelList, SelectedUser selectedUser) {
this.selectedUser = selectedUser;
this.getUserModelListFiltered = userModelList;
this.userModelList = userModelList;
}
@NonNull
@Override
public UsersAdapter.UsersAdapterVh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
context = parent.getContext();
return new UsersAdapterVh(LayoutInflater.from(context).inflate(R.layout.row_users, null));
}
@Override
public void onBindViewHolder(@NonNull UsersAdapter.UsersAdapterVh holder, int position) {
UserModel userModel = userModelList.get(position);
String username = userModel.getUserName();
String prefix = userModel.getUserName().substring(0, 1);
holder.tvUsername.setText(username);
holder.tvPrefix.setText(prefix);
}
@Override
public int getItemCount() {
return userModelList.size();
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults filterResults = new FilterResults();
if (charSequence == null | charSequence.length() == 0) {
filterResults.count = getUserModelListFiltered.size();
filterResults.values = getUserModelListFiltered;
} else {
String searchChr = charSequence.toString().toLowerCase();
List<UserModel> resultData = new ArrayList<>();
for (UserModel userModel : getUserModelListFiltered) {
if (userModel.getUserName().toLowerCase().contains(searchChr)) {
resultData.add(userModel);
}
}
filterResults.count = resultData.size();
filterResults.values = resultData;
}
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filteResults) {
userModelList = (List<UserModel>) filteResults.values;
notifyDataSetChanged();
}
};
return filter;
}
public interface SelectedUser {
void selectedUser(UserModel userModel);
}
public class UsersAdapterVh extends RecyclerView.ViewHolder {
TextView tvPrefix;
TextView tvUsername;
ImageView imIcon;
public UsersAdapterVh(@NonNull View itemView) {
super(itemView);
tvPrefix = itemView.findViewById(R.id.prefix);
tvUsername = tvPrefix.findViewById(R.id.username);
imIcon = itemView.findViewById(R.id.imageView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedUser.selectedUser(userModelList.get(getAdapterPosition()));
}
});
}
}
}