In my android app, I have a recycler view and i have search bar. I am getting data from db. When i search the corresponding data from database is searched and number of rows are added in recycler view depending upon the length of json array fetch from data base. Now the problem comes when i perform another search the rows which are generated from last search didn't remove. Infect new rows are added. For example for first time when i made search then 3 rows are added because length of json array is 3. Next time when i made search, and lets say the length of json array is 2 then previous 3 rows didn't get remove infect i get 5 rows(previous search 3 rows and next search 2 rows). I want if i made a search the rows generated from previous search should be removed.
adapterise = new MessagesAdapter(MessageItem,home_Activity);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapterise);
try {
JSONArray jsonArray = new JSONArray(output);
recyclerView.removeAllViewsInLayout();
recyclerView.setAdapter(null);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapterise);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);//returnJson;
pic=jsonObject.getString("pic");
MessageItem.add(new MessageItem(pic,jsonObject.getString("name"),jsonObject.getString("email"),jsonObject.getString("mobile"),jsonObject.getString("uid")));
}
}
This is my adapter code
class MessagesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView imageView;
ImageView imageViewc;
ImageView imageViewm;
TextView textView1;
TextView textView2;
TextView textView3;
CardView card;
String pos;
boolean selected= false;
MessagesViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
imageViewc = itemView.findViewById(R.id.call);
imageViewm = itemView.findViewById(R.id.msg);
textView1 = itemView.findViewById(R.id.placename);
textView2 = itemView.findViewById(R.id.placedescription);
textView3 = itemView.findViewById(R.id.placedescriptions);
card = itemView.findViewById(R.id.card);
imageViewc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:"+textView3.getText().toString()));
context.startActivity(callIntent);
}
});
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent callIntent = new Intent(context, LoadPic.class);
callIntent.putExtra("url",pos);
context.startActivity(callIntent);
}
});
imageViewm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Fragment fragment = new WriteMessageToUser();
if(fragment!=null) {
for (Fragment fragments : ((HomeActivity)context).getSupportFragmentManager().getFragments()) {
((HomeActivity)context).getSupportFragmentManager().beginTransaction().remove(fragments).commit();
}
}
FragmentTransaction transaction=((HomeActivity)context).getSupportFragmentManager().beginTransaction();
Bundle bundle=new Bundle();
bundle.putString("email", textView2.getText().toString());
bundle.putString("heading",textView1.getText().toString());
fragment.setArguments(bundle);
transaction.replace(R.id.nav_host_fragment,fragment);
transaction.commit();
}
});
card.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
card.setCardBackgroundColor(ContextCompat.getColor(context,R.color.light_blue));
selected=true;
delete_chat.setVisibility(View.VISIBLE);
receivers.add(card.getTag().toString());
return true;
}
});
card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(selected){
receivers.remove(card.getTag().toString());
card.setCardBackgroundColor(ContextCompat.getColor(context,R.color.white));
selected=false;
}
if(receivers.size()==0){
delete_chat.setVisibility(View.GONE);
}
}
});
}
@Override
public void onClick(View view) {
}
}
public MessagesAdapter(List<MessageItem> exampleList, Context context) {
this.exampleList = exampleList;
this.context = context;
exampleListFull = new ArrayList<>(exampleList);
}
@NonNull
@Override
public MessagesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_item,
parent, false);
return new MessagesViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MessagesViewHolder holder, final int position) {
MessageItem currentItem = exampleList.get(position);
if(currentItem.getImageResource().contains("https:")){
Glide.with(context).load(currentItem.getImageResource()).into(holder.imageView);
Glide.with(context).load(currentItem.getImageResource()).apply(RequestOptions.circleCropTransform()).into(holder.imageView);
holder.pos=currentItem.getImageResource();
}else{
Glide.with(context).load(ROOT_URL+"/"+currentItem.getImageResource()).into(holder.imageView);
Glide.with(context).load(ROOT_URL+"/"+currentItem.getImageResource()).apply(RequestOptions.circleCropTransform()).into(holder.imageView);
holder.pos=ROOT_URL+"/"+currentItem.getImageResource();
}
holder.textView1.setText(currentItem.getText1());
holder.textView2.setText(currentItem.getText2());
holder.textView3.setText(currentItem.getText3());
holder.card.setTag(currentItem.gettextTag());
}
@Override
public int getItemCount() {
return exampleList.size();
}