This is my RecyclerViewAdapter code
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> implements Filterable{
Context context;
ArrayList<RecyclerViewItems> itemsArrayList;
ArrayList<RecyclerViewItems> itemsArrayListFull;
private SelectItemListener listener;
RelativeLayout plannerLayout;
public RecyclerViewAdapter(Context context, ArrayList<RecyclerViewItems> itemsArrayList, SelectItemListener listener) {
this.context = context;
this.itemsArrayListFull = itemsArrayList;
this.itemsArrayList = new ArrayList<>(itemsArrayListFull);
this.listener = listener;
}
@NonNull
@Override
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new RecyclerViewHolder(LayoutInflater.from(context).inflate(R.layout.recyclerview_items_layout, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
holder.nameView.setText(itemsArrayListFull.get(position).getName());
holder.sizeView.setText(itemsArrayListFull.get(position).getSizeString());
holder.imageView.setImageResource(itemsArrayListFull.get(position).getImage());
holder.imageView.setTag(itemsArrayListFull.get(position).getImage());
holder.imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
listener.onItemSelected(holder.imageView);
return false;
}
});
}
@Override
public int getItemCount() {
return itemsArrayListFull.size();
}
@Override
public Filter getFilter() {
return itemsFilter;
}
private final Filter itemsFilter = new Filter(){
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
ArrayList<RecyclerViewItems> filteredItemsList = new ArrayList<>();
if (charSequence == null || charSequence.length() == 0){
filteredItemsList.addAll(itemsArrayListFull);
} else {
String filterPattern = charSequence.toString().toLowerCase().trim();
for(RecyclerViewItems recyclerViewItems : itemsArrayListFull){
if(recyclerViewItems.name.toLowerCase().contains(filterPattern)){
filteredItemsList.add(recyclerViewItems);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredItemsList;
results.count = filteredItemsList.size();
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults results) {
itemsArrayList.clear();
itemsArrayList.addAll((ArrayList)results.values);
notifyDataSetChanged();
}
};
}
This is my main activity page.
public class Planner_Area_Page extends AppCompatActivity implements AdapterView.OnItemSelectedListener, SelectItemListener {
Spinner spinner;
//Planner area layout variables
RelativeLayout plannerArea;
BathroomPlannerLayout bathroomPlannerLayout;
RecyclerViewAdapter recyclerViewAdapter;
ArrayList<RecyclerViewItems> itemsArrayList;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_planner_area);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//Planner area layout init
plannerArea = findViewById(R.id.plannerArea);
bathroomPlannerLayout = new BathroomPlannerLayout(this, plannerArea);
itemsArrayList = new ArrayList<RecyclerViewItems>();
setSpinner();
initSearchWidget();
makeResponsive();
getData();
}
private void getData() {
itemsArrayList.add(new RecyclerViewItems("toilet", 9, 9, R.drawable.toilet));
itemsArrayList.add(new RecyclerViewItems("shower", 9, 9, R.drawable.toilet));
itemsArrayList.add(new RecyclerViewItems("toilet", 9, 9, R.drawable.toilet));
itemsArrayList.add(new RecyclerViewItems("toilet", 9, 9, R.drawable.toilet));
itemsArrayList.add(new RecyclerViewItems("toilet", 9, 9, R.drawable.toilet));
recyclerViewAdapter = new RecyclerViewAdapter(getApplicationContext(), itemsArrayList, this);
recyclerView.setAdapter(recyclerViewAdapter);
recyclerViewAdapter.notifyDataSetChanged();
}
//set searchview on the menubar
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.menu_item,menu);
MenuItem menuItem = menu.findItem(R.id.app_bar_search );
SearchView searchView = (SearchView) menuItem.getActionView();
searchView.setMaxWidth(Integer.MAX_VALUE);
searchView.setQueryHint("Search Here!");
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String userText) {
return false;
}
@Override
public boolean onQueryTextChange(String userText) {
recyclerViewAdapter.getFilter().filter(userText);
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
I thought when I type any word on the searchview, and that text goest to getfilter method with parameter"userText".
and then that "userText" goes into itemsFilter and sort the items and put new item list in the filtereditemslist.
But it is not sorting when I run debug. How can I sort this out?