-1

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()));
                }
            });
        }
    }
}
Hakan Dilek
  • 2,178
  • 2
  • 23
  • 35

1 Answers1

1

Replace below code in UsersAdapterVh class

 tvUsername = tvPrefix.findViewById(R.id.username);

with

tvUsername = itemView.findViewById(R.id.username);

because your code is trying to find tvUsername inside tvPrefix which will return null.

Alpha 1
  • 4,118
  • 2
  • 17
  • 23