Ни мой исходный список, ни мой отфильтрованный список не удаляются после ввода поискового запроса. ⇐ JAVA
Ни мой исходный список, ни мой отфильтрованный список не удаляются после ввода поискового запроса.
I have two arraylist here, soilList where it contains data about soil and filteredList which is used for the search. When a user enters a search query, filter() method is called to filter the list of soil items based on the entered text. The program also have two delete button. One button is for clearing all the soilList, which is working fine. The other button (called TextView delete) which is for deleting an individual item is not doing its job. When deleting an item from soilList in adapter, it doesn't affect the filtered list (filteredList) in main activity, causing the deleted item to reappear when performing a search again, I think.
MAIN CLASS
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{ RecyclerView recyclerView; ArrayList soilList; RecyclerAdapter recyclerAdapter; ImageView deleteAll; AlertDialog.Builder deleteAllBuilder; EditText searchHx; ArrayList filteredList; @SuppressLint("RestrictedApi") @Override protected void onCreate(Bundle savedInstanceState) { addList(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); initRecyclerView(); deleteAll = findViewById(R.id.deleteAll); Spinner spinner = findViewById(R.id.spinner); deleteAllBuilder = new AlertDialog.Builder(this); deleteAll.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ deleteAllBuilder.setTitle("Alert").setMessage("Do you want to delete all?").setCancelable(true).setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { soilList.clear(); filteredList.clear(); recyclerAdapter.notifyDataSetChanged(); Toast.makeText(view.getContext(), "Items deleted successfully", Toast.LENGTH_SHORT).show(); } }).setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } }); searchHx = findViewById(R.id.searchHx); //searchHx.clearFocus(); searchHx.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) { filter(s.toString()); recyclerAdapter.notifyDataSetChanged(); } }); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.numbers, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(this); } private void filter(String text) { filteredList = new ArrayList(); for (ListSoil item: soilList) { if (item.getSoilName().toLowerCase().contains(text.toLowerCase())) { filteredList.add(item); } } } private void addList() { soilList = new ArrayList(); soilList.add(new ListSoil("Soil 1", "Passed", "date",0, 0, 0)); soilList.add(new ListSoil("Soil 2", "Failed", "date",0, 0, 0)); soilList.add(new ListSoil("Soil 3", "Passed", "date",0, 0, 0)); soilList.add(new ListSoil("Soil 4", "Passed","date",0, 0, 0)); soilList.add(new ListSoil("Soil 5", "Passed", "date",0, 0, 10)); } private void initRecyclerView(){ recyclerAdapter = new RecyclerAdapter(soilList, filteredList); recyclerView.setAdapter(recyclerAdapter); } @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { String text = parent.getItemAtPosition(position).toString(); //Toast.makeText(parent.getContext(), text, Toast.LENGTH_SHORT).show(); /*if (text.equals("Ascending")) { } else if (text.equals("Descending")) { }*/ } @Override public void onNothingSelected(AdapterView parent) { } } ADAPTER CLASS
public class RecyclerAdapter extends RecyclerView.Adapter{ ArrayList soilList; AlertDialog.Builder deleteBuilder; ArrayList filteredList; public RecyclerAdapter(ArrayList soilList,ArrayList filteredList) { this.soilList = soilList; this.filteredList = filteredList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); View view = layoutInflater.inflate(R.layout.history_row, parent, false); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { ListSoil list = soilList.get(position); holder.soilName.setText(list.getSoilName()); holder.remarks.setText(list.getRemarks()); holder.date.setText(list.getDate()); holder.nitrogenInput.setText(String.valueOf(list.getNitrogenInput())); holder.phosphorusInput.setText(String.valueOf(list.getPhosphorusInput())); holder.potassiumInput.setText(String.valueOf(list.getPotassiumInput())); } @Override public int getItemCount() { return soilList.size(); } public void filterList(ArrayList filteredList) { soilList = filteredList; notifyDataSetChanged(); } class ViewHolder extends RecyclerView.ViewHolder{ TextView soilName, remarks, date, nitrogenInput, phosphorusInput, potassiumInput, delete; ConstraintLayout expandableLayout; ImageView arrow; public ViewHolder(@NonNull View itemView) { super(itemView); soilName = itemView.findViewById(R.id.soilName); remarks = itemView.findViewById(R.id.remarks); date = itemView.findViewById(R.id.date); nitrogenInput = itemView.findViewById(R.id.nitrogenInput); phosphorusInput = itemView.findViewById(R.id.phosphorusInput); potassiumInput = itemView.findViewById(R.id.potassiumInput); expandableLayout = itemView.findViewById(R.id.expandableLayout); arrow = itemView.findViewById(R.id.arrow); delete = itemView.findViewById(R.id.delete); arrow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (expandableLayout.getVisibility() == View.GONE) { expandableLayout.setVisibility(View.VISIBLE); arrow.setImageResource(R.drawable.arrow_up); } else { expandableLayout.setVisibility(View.GONE); arrow.setImageResource(R.drawable.arrow_down); } } }); deleteBuilder = new AlertDialog.Builder(itemView.getContext()); delete.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ deleteBuilder.setTitle("Alert") .setMessage("Do you want to delete this?") .setCancelable(true) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { soilList.remove(getAdapterPosition()); if (filteredList != null) { filteredList.remove(getAdapterPosition()); } notifyItemRemoved(getAdapterPosition()); Toast.makeText(itemView.getContext(), "Item deleted", Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); } }); } } } LIST CLASS
public class ListSoil { String soilName; String remarks; String date; int nitrogenInput; int phosphorusInput; int potassiumInput; public ListSoil(String soilName, String remarks, String date, int nitrogenInput, int phosphorusInput, int potassiumInput) { this.soilName = soilName; this.remarks = remarks; this.date = date; this.nitrogenInput = nitrogenInput; this.phosphorusInput = phosphorusInput; this.potassiumInput = potassiumInput; } public String getSoilName() { return soilName; } public void setSoilName(String soilName) { this.soilName = soilName; } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public int getNitrogenInput() { return nitrogenInput; } public void setNitrogenInput(int nitrogenInput) { this.nitrogenInput = nitrogenInput; } public int getPhosphorusInput() { return phosphorusInput; } public void setPhosphorusInput(int phosphorusInput) { this.phosphorusInput = phosphorusInput; } public int getPotassiumInput() { return potassiumInput; } public void setPotassiumInput(int potassiumInput) { this.potassiumInput = potassiumInput; } } idk how to delete an item in filteredList
Источник: https://stackoverflow.com/questions/780 ... ring-searc
I have two arraylist here, soilList where it contains data about soil and filteredList which is used for the search. When a user enters a search query, filter() method is called to filter the list of soil items based on the entered text. The program also have two delete button. One button is for clearing all the soilList, which is working fine. The other button (called TextView delete) which is for deleting an individual item is not doing its job. When deleting an item from soilList in adapter, it doesn't affect the filtered list (filteredList) in main activity, causing the deleted item to reappear when performing a search again, I think.
MAIN CLASS
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{ RecyclerView recyclerView; ArrayList soilList; RecyclerAdapter recyclerAdapter; ImageView deleteAll; AlertDialog.Builder deleteAllBuilder; EditText searchHx; ArrayList filteredList; @SuppressLint("RestrictedApi") @Override protected void onCreate(Bundle savedInstanceState) { addList(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); initRecyclerView(); deleteAll = findViewById(R.id.deleteAll); Spinner spinner = findViewById(R.id.spinner); deleteAllBuilder = new AlertDialog.Builder(this); deleteAll.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ deleteAllBuilder.setTitle("Alert").setMessage("Do you want to delete all?").setCancelable(true).setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { soilList.clear(); filteredList.clear(); recyclerAdapter.notifyDataSetChanged(); Toast.makeText(view.getContext(), "Items deleted successfully", Toast.LENGTH_SHORT).show(); } }).setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }).show(); } }); searchHx = findViewById(R.id.searchHx); //searchHx.clearFocus(); searchHx.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) { filter(s.toString()); recyclerAdapter.notifyDataSetChanged(); } }); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.numbers, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(this); } private void filter(String text) { filteredList = new ArrayList(); for (ListSoil item: soilList) { if (item.getSoilName().toLowerCase().contains(text.toLowerCase())) { filteredList.add(item); } } } private void addList() { soilList = new ArrayList(); soilList.add(new ListSoil("Soil 1", "Passed", "date",0, 0, 0)); soilList.add(new ListSoil("Soil 2", "Failed", "date",0, 0, 0)); soilList.add(new ListSoil("Soil 3", "Passed", "date",0, 0, 0)); soilList.add(new ListSoil("Soil 4", "Passed","date",0, 0, 0)); soilList.add(new ListSoil("Soil 5", "Passed", "date",0, 0, 10)); } private void initRecyclerView(){ recyclerAdapter = new RecyclerAdapter(soilList, filteredList); recyclerView.setAdapter(recyclerAdapter); } @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { String text = parent.getItemAtPosition(position).toString(); //Toast.makeText(parent.getContext(), text, Toast.LENGTH_SHORT).show(); /*if (text.equals("Ascending")) { } else if (text.equals("Descending")) { }*/ } @Override public void onNothingSelected(AdapterView parent) { } } ADAPTER CLASS
public class RecyclerAdapter extends RecyclerView.Adapter{ ArrayList soilList; AlertDialog.Builder deleteBuilder; ArrayList filteredList; public RecyclerAdapter(ArrayList soilList,ArrayList filteredList) { this.soilList = soilList; this.filteredList = filteredList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); View view = layoutInflater.inflate(R.layout.history_row, parent, false); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { ListSoil list = soilList.get(position); holder.soilName.setText(list.getSoilName()); holder.remarks.setText(list.getRemarks()); holder.date.setText(list.getDate()); holder.nitrogenInput.setText(String.valueOf(list.getNitrogenInput())); holder.phosphorusInput.setText(String.valueOf(list.getPhosphorusInput())); holder.potassiumInput.setText(String.valueOf(list.getPotassiumInput())); } @Override public int getItemCount() { return soilList.size(); } public void filterList(ArrayList filteredList) { soilList = filteredList; notifyDataSetChanged(); } class ViewHolder extends RecyclerView.ViewHolder{ TextView soilName, remarks, date, nitrogenInput, phosphorusInput, potassiumInput, delete; ConstraintLayout expandableLayout; ImageView arrow; public ViewHolder(@NonNull View itemView) { super(itemView); soilName = itemView.findViewById(R.id.soilName); remarks = itemView.findViewById(R.id.remarks); date = itemView.findViewById(R.id.date); nitrogenInput = itemView.findViewById(R.id.nitrogenInput); phosphorusInput = itemView.findViewById(R.id.phosphorusInput); potassiumInput = itemView.findViewById(R.id.potassiumInput); expandableLayout = itemView.findViewById(R.id.expandableLayout); arrow = itemView.findViewById(R.id.arrow); delete = itemView.findViewById(R.id.delete); arrow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (expandableLayout.getVisibility() == View.GONE) { expandableLayout.setVisibility(View.VISIBLE); arrow.setImageResource(R.drawable.arrow_up); } else { expandableLayout.setVisibility(View.GONE); arrow.setImageResource(R.drawable.arrow_down); } } }); deleteBuilder = new AlertDialog.Builder(itemView.getContext()); delete.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ deleteBuilder.setTitle("Alert") .setMessage("Do you want to delete this?") .setCancelable(true) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { soilList.remove(getAdapterPosition()); if (filteredList != null) { filteredList.remove(getAdapterPosition()); } notifyItemRemoved(getAdapterPosition()); Toast.makeText(itemView.getContext(), "Item deleted", Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); } }); } } } LIST CLASS
public class ListSoil { String soilName; String remarks; String date; int nitrogenInput; int phosphorusInput; int potassiumInput; public ListSoil(String soilName, String remarks, String date, int nitrogenInput, int phosphorusInput, int potassiumInput) { this.soilName = soilName; this.remarks = remarks; this.date = date; this.nitrogenInput = nitrogenInput; this.phosphorusInput = phosphorusInput; this.potassiumInput = potassiumInput; } public String getSoilName() { return soilName; } public void setSoilName(String soilName) { this.soilName = soilName; } public String getRemarks() { return remarks; } public void setRemarks(String remarks) { this.remarks = remarks; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public int getNitrogenInput() { return nitrogenInput; } public void setNitrogenInput(int nitrogenInput) { this.nitrogenInput = nitrogenInput; } public int getPhosphorusInput() { return phosphorusInput; } public void setPhosphorusInput(int phosphorusInput) { this.phosphorusInput = phosphorusInput; } public int getPotassiumInput() { return potassiumInput; } public void setPotassiumInput(int potassiumInput) { this.potassiumInput = potassiumInput; } } idk how to delete an item in filteredList
Источник: https://stackoverflow.com/questions/780 ... ring-searc
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Динамическое создание поискового запроса с помощью клиента Elasticsearch .NET 8.3
Anonymous » » в форуме C# - 0 Ответы
- 33 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Динамическое создание поискового запроса с помощью клиента Elasticsearch .NET 8.3
Anonymous » » в форуме C# - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Динамическое создание поискового запроса с помощью клиента Elasticsearch .NET 8.3
Anonymous » » в форуме C# - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Добавляйте поддельные сообщения в результаты поискового запроса WordPress
Anonymous » » в форуме Php - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-