I am using a recycler view with a filter. When I load the data into the recycler view the first time, it gives me a perfect result, but when I use the search option, it is not giving me the result I wanted.
I want to show an activate button when the user field status is deactivated in the database, and show a deactivate button when the user field status is activated in the database. However, after performing the search it's not happening.
This image is giving me perfect result when I load first-time recycler view:
This image after search result but not giving the result I wanted:
Below is my adapter class
private final Context mContext;
private final List<UserHelperClass> mFilteredList;
private final List<UserHelperClass> mDataList;
public User_Control_adapter_class(Context mContext,List<UserHelperClass> mFilteredList) {
this.mContext=mContext;
this.mFilteredList = mFilteredList;
mDataList = new ArrayList<>(mFilteredList);
}
@Override
public Filter getFilter() {
return filteredList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_control_single_row, parent, false);
return new MyViewHolder(rootView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
final UserHelperClass userHelperClass = mFilteredList.get(position);
holder.fullname.setText(userHelperClass.getFullname());
holder.aadhar.setText(userHelperClass.getUsername());
holder.stationid.setText(userHelperClass.getStationid());
holder.contactno.setText(userHelperClass.getContactno());
if (userHelperClass.getStatus().equals("Active")) {
holder.activate.setVisibility(View.GONE);
} else {
holder.deactivate.setVisibility(View.GONE);
}
holder.copy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ClipboardManager clipboard = (ClipboardManager)mContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(userHelperClass.getUsername(), userHelperClass.getUsername());
Toast.makeText(mContext, userHelperClass.getUsername()+ " Copied Successfully", Toast.LENGTH_SHORT).show();
clipboard.setPrimaryClip(clip);
}
});
holder.call.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + userHelperClass.getContactno()));
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mFilteredList.size();
}
private final Filter filteredList = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<UserHelperClass> filterlist = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filterlist.addAll(mDataList);
} else {
String pattern = constraint.toString().toLowerCase().trim();
for (UserHelperClass item : mDataList) {
if (item.getFullname().toLowerCase().contains(pattern)) {
filterlist.add(item);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filterlist;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mFilteredList.clear();
mFilteredList.addAll((List) results.values);
notifyDataSetChanged();
}
};
static class MyViewHolder extends RecyclerView.ViewHolder {
TextView fullname, aadhar, contactno, stationid;
Button activate, deactivate, viewEOD, viewCertificate, copy;
ImageButton call;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
fullname = itemView.findViewById(R.id.user_control_single_name);
aadhar = itemView.findViewById(R.id.user_control_single_aadhar);
contactno = itemView.findViewById(R.id.user_control_single_contact);
stationid = itemView.findViewById(R.id.user_control_single_stationid);
activate = itemView.findViewById(R.id.user_control_active_button);
deactivate = itemView.findViewById(R.id.user_control_deactive_button);
viewEOD = itemView.findViewById(R.id.user_control_View_EOD_button);
viewCertificate = itemView.findViewById(R.id.user_control_certificate_button);
copy = itemView.findViewById(R.id.copy_button);
call = itemView.findViewById(R.id.call_button);
}
}
}
Below is my User_control class
public class User_Control extends AppCompatActivity {
Toolbar toolbar;
ProgressBar progressBar;
private List<UserHelperClass> mDataList=new ArrayList<>();
private User_Control_adapter_class mRecyler_View_User_Control_Adapter;
TextInputLayout searchText;
String search_string;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user__control);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
toolbar = findViewById(R.id.custome_toolbar);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setActionBar(toolbar);
}
searchText=findViewById(R.id.textlayout_search_layout_user_control);
search_string= Objects.requireNonNull(searchText.getEditText()).toString().trim();
progressBar = (ProgressBar) findViewById(R.id.spin_kit);
Sprite fadingCircle = new Circle();
progressBar.setIndeterminateDrawable(fadingCircle);
progressBar.setVisibility(View.VISIBLE);
getUserInformation();
searchText.getEditText().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) {
mRecyler_View_User_Control_Adapter.getFilter().filter(s);
}
});
}
//end of OnCreate
private void getUserInformation() {
DatabaseReference mRef= FirebaseDatabase.getInstance().getReference("Users");
mRef.orderByChild("username").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot snapshot1:snapshot.getChildren())
{
if (snapshot1.exists())
{
UserHelperClass userHelperClass=snapshot1.getValue(UserHelperClass.class);
assert userHelperClass !=null;
if(!userHelperClass.getUsername().equals("1"))
{
mDataList.add(userHelperClass);
}
}else
{
Log.d("Error","No Snapshot exists");}
}
RecyclerView mRecylerView = findViewById(R.id.recycler_view_user_control);
mRecylerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(User_Control.this);
mRecyler_View_User_Control_Adapter=new User_Control_adapter_class(User_Control.this,mDataList);
mRecylerView.setLayoutManager(layoutManager);
mRecylerView.setAdapter(mRecyler_View_User_Control_Adapter);
progressBar.setVisibility(View.GONE);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Log.d("Database Error","Failed to fatch data from the server");
}
});
}
}
Try with this, I think it's working..!
private final Filter filteredList = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<UserHelperClass> filterlist = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filterlist.addAll(mDataList);
} else {
String pattern = constraint.toString().toLowerCase().trim();
for (UserHelperClass item : mDataList) {
if (item.getFullname().toLowerCase().contains(pattern) && item.getStatus().equals("Active")) {
filterlist.add(item);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filterlist;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mFilteredList.clear();
mFilteredList.addAll((List) results.values);
notifyDataSetChanged();
}
};
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.