I have a problem in data filtering, where the first row is not read when data filtering is done


for example in the image above, the word that has the letters "Ore" should display 3 data, but the first data is not readable, only 2 data appear
my adapter :
public class AdapterProduct extends RecyclerView.Adapter { private Context context; private Activity activity; private ArrayList prodcode, prodname, satuan,edited; DBStock dbStock; AdapterProduct(Activity activity, Context context, ArrayList prodcode, ArrayList prodname, ArrayList satuan, ArrayList edited) { this.activity = activity; this.context = context; this.prodcode = prodcode; this.prodname = prodname; this.satuan = satuan; this.edited = edited; } @NonNull @Override public userViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.activity_m_product_detail, parent, false); return new userViewHolder(view); } @RequiresApi(api = Build.VERSION_CODES.M) @Override public void onBindViewHolder(@NonNull final userViewHolder holder, @SuppressLint("RecyclerView") final int position) { int rowPos = holder.getAdapterPosition(); if (rowPos == 0) { holder.txtadpprodcode.setBackgroundResource(R.drawable.table_header_cell_bg); holder.txtadpprodname.setBackgroundResource(R.drawable.table_header_cell_bg); holder.txtadpsatuan.setBackgroundResource(R.drawable.table_header_cell_bg); holder.txtadpedit.setBackgroundResource(R.drawable.table_header_cell_bg); holder.txtadpprodcode.setText("Item Code"); holder.txtadpprodcode.setGravity(1); holder.txtadpprodcode.setTypeface(null, Typeface.BOLD); holder.txtadpprodname.setText("Item Name"); holder.txtadpprodname.setGravity(1); holder.txtadpprodname.setTypeface(null, Typeface.BOLD); holder.txtadpsatuan.setText("Satuan"); holder.txtadpsatuan.setGravity(1); holder.txtadpsatuan.setTypeface(null, Typeface.BOLD); holder.txtadpedit.setText("Option"); holder.txtadpedit.setGravity(1); holder.txtadpedit.setTypeface(null, Typeface.BOLD); } else { holder.txtadpprodcode.setBackgroundResource(R.drawable.table_content_cell_bg); holder.txtadpprodname.setBackgroundResource(R.drawable.table_content_cell_bg); holder.txtadpedit.setBackgroundResource(R.drawable.table_content_cell_bg); holder.txtadpsatuan.setBackgroundResource(R.drawable.table_content_cell_bg); holder.txtadpprodcode.setText(String.valueOf(prodcode.get(position))); holder.txtadpprodname.setText(String.valueOf(prodname.get(position))); holder.txtadpsatuan.setText(String.valueOf(satuan.get(position))); holder.txtadpedit.setBackgroundResource(R.drawable.ic_baseline_more_vert_24); } } @Override public int getItemCount() { return prodname.size(); } class userViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, PopupMenu.OnMenuItemClickListener { TextView txtadpprodcode , txtadpprodname, txtadpedit, txtadpsatuan; userViewHolder(@NonNull View itemView) { super(itemView); txtadpprodcode = itemView.findViewById(R.id.txtprodcode); txtadpprodname = itemView.findViewById(R.id.txtprodname); txtadpedit = itemView.findViewById(R.id.txtedit); txtadpsatuan = itemView.findViewById(R.id.txtsatuan); txtadpedit.setOnClickListener(this); } @Override public void onClick(View v) { showOptMenu(v); } private void showOptMenu(View viewopt) { PopupMenu popupMenu = new PopupMenu(viewopt.getContext(), viewopt); popupMenu.inflate(R.menu.opt_menuproduct); popupMenu.setOnMenuItemClickListener(this); popupMenu.show(); } @Override public boolean onMenuItemClick(MenuItem item) { dbStock = new DBStock(txtadpedit.getContext()); switch (item.getItemId()) { case R.id.opteditproduct: final Dialog dialog = new Dialog(txtadpedit.getContext(), R.style.DialogStyle); dialog.setContentView(R.layout.activity_editproduct); dialog.setCancelable(false); dialog.setCanceledOnTouchOutside(false); dialog.show(); Button btNo = dialog.findViewById(R.id.btn_no); Button btYes = dialog.findViewById(R.id.btn_yes); final EditText edprodcode = dialog.findViewById(R.id.edtprodcode); final EditText edprodname = dialog.findViewById(R.id.edtprodname); final Spinner Spinuom = dialog.findViewById(R.id.spinnerSatuan); ArrayAdapter adapterworkstatus = ArrayAdapter.createFromResource(txtadpedit.getContext(), R.array.array_satuan, android.R.layout.simple_spinner_item); adapterworkstatus.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinuom.setAdapter(adapterworkstatus); edprodcode.setText(txtadpprodcode.getText()); edprodname.setText(txtadpprodname.getText()); btNo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); btYes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dbStock.updateMProduct(edprodcode.getText().toString(),edprodname.getText().toString(), Spinuom.getSelectedItem().toString()); dialog.dismiss(); } }); dialog.show(); return true; case R.id.optdeleteproduct: AlertDialog.Builder builder = new AlertDialog.Builder(txtadpedit.getContext()); builder.setTitle("DELETE"); builder.setMessage("Are You Sure Delete This Product?"); builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int id) { dbStock.removeMProduct(txtadpprodcode.getText().toString()); adapterrefresh(); dialogInterface.dismiss(); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int id) { dialogInterface.dismiss(); } }); AlertDialog alertDialog = builder.create(); alertDialog.show(); return true; default: return false; } } } public void filterList(ArrayList filterdNames) { this.prodname = filterdNames; notifyDataSetChanged(); } public void adapterrefresh() { notifyDataSetChanged(); } } in Activity
public class MasterProduct extends AppCompatActivity { DBStock dbStock; RecyclerView recyclerView, recyclerView2; ArrayList prodcode, prodname, satuan,edited; AdapterProduct adapterProduct; String sProdCode, sProdName,sUOM; EditText edSearch; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_m_product); Toolbar toolbar = (Toolbar) findViewById(R.id.viewbar); setSupportActionBar(toolbar); getSupportActionBar().setTitle("Master Product"); dbStock = new DBStock(this); recyclerView = (RecyclerView) findViewById(R.id.recyclerView); edSearch = (EditText) findViewById(R.id.edtfilter); prodcode = new ArrayList(); prodname = new ArrayList(); satuan = new ArrayList(); edited = new ArrayList(); adapterProduct = new AdapterProduct(MasterProduct.this, this, prodcode, prodname, satuan,edited); recyclerView.setAdapter(adapterProduct); recyclerView.setLayoutManager(new LinearLayoutManager(MasterProduct.this)); storeDataFromDBLocal(); //SetAdapter(); edSearch.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()); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.opt_menuproductadd, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.optAdd: showdialogaddproduct(); return true; case R.id.optImport: Intent intent = new Intent(MasterProduct.this, ImportProduct.class); startActivity(intent); return true; case R.id.optclear: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("DELETE ALL PRODUCT"); builder.setMessage("Are You Sure Clear Data Product?"); builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int id) { dbStock.removeAllMproduct(); dialogInterface.dismiss(); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int id) { dialogInterface.dismiss(); } }); AlertDialog alertDialog = builder.create(); alertDialog.show(); return true; default: return false; } } void storeDataFromDBLocal(){ Cursor cursor = dbStock.getMProduct(); if (cursor.moveToFirst()) { do { prodcode.add(cursor.getString(0)); prodname.add(cursor.getString(1)); satuan.add(cursor.getString(2)); } while (cursor.moveToNext()); } } public void ShowToast(String message) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } public void showdialogaddproduct() { final Dialog dialog = new Dialog(this, R.style.DialogStyle); dialog.setContentView(R.layout.activity_addproduct); dialog.setCancelable(false); dialog.setCanceledOnTouchOutside(false); dialog.show(); Button btNo = dialog.findViewById(R.id.btn_no); Button btYes = dialog.findViewById(R.id.btn_yes); final EditText edprodcode = dialog.findViewById(R.id.edtprodcode); final EditText edprodname = dialog.findViewById(R.id.edtprodname); final Spinner Spinuom = dialog.findViewById(R.id.spinnerSatuan); ArrayAdapter adapterworkstatus = ArrayAdapter.createFromResource(this, R.array.array_satuan, android.R.layout.simple_spinner_item); adapterworkstatus.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinuom.setAdapter(adapterworkstatus); btNo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); btYes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sProdCode = edprodcode.getText().toString(); sProdName = edprodname.getText().toString(); sUOM = Spinuom.getSelectedItem().toString(); dbStock.addDataMProduct(sProdCode,sProdName,sUOM); adapterProduct.adapterrefresh(); dialog.dismiss(); } }); dialog.show(); } private void filter(String text) { ArrayList filterdNames = new ArrayList(); for (String s : prodname) { //if the existing elements contains the search input if (s.toLowerCase().contains(text.toLowerCase())) { //adding the element to filtered list filterdNames.add(s); } } adapterProduct.filterList(filterdNames); } } help me fix it if something is wrong thanks...
Источник: https://stackoverflow.com/questions/781 ... searchview