Я пытаюсь создать фильтр для моих 2-х массивов.
Ниже будет проще нарисовать все вместе:
Вот так выглядят мои arraylists:
[1] Names:
1: McDonals
2: KFC
3: H&M
4: Harrods
5: Test
etc...
и еще один arraylist:
[2] Icons:
1: url1
2: url2
3: url3
4: url4
5: url5
Я поместил оба этих списка в окно реселлера (в android studio), чтобы отобразить первую позицию из [1] массива с именами и первую позицию из [2] массива с иконками, и это выглядит так:
[1]: Name: McDonals, Icon: url1
[2]: Name: KFC, Icon: url2
[3]: Name: H&M, Icon: url3
[4]: Name: Harrods, Icon: url4
[5]: Name: Test, Icon: url5
И знаешь, в чем проблема ...
Я пытаюсь создать строковый фильтр из [1] arraylist с именами
В настоящее время у меня есть что-то подобное, и оно работает довольно хорошо, но теперь достаточно: D
@Override
public boolean onQueryTextChange(String s) {
PartnersModel partnersModel = new PartnersModel();
if (s == null || s.trim().isEmpty()) {
initRecyclerView();
}
filteredValues = new ArrayList<String>(partnersModel.getmPartners_Name());
for (String value : partnersModel.getmPartners_Name()) {
if (!value.toLowerCase().contains(s.toLowerCase())) {
filteredValues.remove(value);
}
initRecyclerView(filteredValues);
}
return false;
}
Когда я добавляю, например, в свой текст редактирования "Harr", это заставляет удалить всю строку из массива, в которой он не указан в заголовке, но у меня все еще есть массив с иконками. Ввод "Harr" заставляет удалить "McDonals", "KFC", "H & M", "Test", но у меня все еще есть массив с 5 позициями, и автоматически мой "Harr", который имеет позицию "4" в моем основном массиве, автоматически получает значок с первой позиции в arraylist со значком, и это выглядит так:
[1]: Name: Harrods, Icon: url1
и мне бы хотелось, чтобы это выглядело так
[1]: Name: Harrods, Icon: url4
Это мой код:
private void initRecyclerView() {
PartnersModel partnersModel = new PartnersModel();
adapter_partnerzy = new RecyclerViewAdapter_partners(getContext(), partnersModel.mPartners_Id, partnersModel.mPartners_Wid, partnersModel.mPartners_Name, partnersModel.mPartners_Longitude, partnersModel.mPartners_Latitude, partnersModel.mPartners_Desc, partnersModel.mPartners_Picture, partnersModel.mPartners_City, partnersModel.mPartners_Multiplier, partnersModel.mPartners_OwnedPoints);
recyclerView.setAdapter(adapter_partnerzy);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
}
private void initRecyclerView(ArrayList<String> filteredName) {
PartnersModel partnersModel = new PartnersModel();
adapter_partnerzy = new RecyclerViewAdapter_partners(getContext(), partnersModel.mPartners_Id, partnersModel.mPartners_Wid, filteredName, partnersModel.mPartners_Longitude, partnersModel.mPartners_Latitude, partnersModel.mPartners_Desc, partnersModel.mPartners_Picture, partnersModel.mPartners_City, partnersModel.mPartners_Multiplier, partnersModel.mPartners_OwnedPoints);
recyclerView.setAdapter(adapter_partnerzy);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
}
и адаптер:
public class ViewHolder extends RecyclerView.ViewHolder implements SearchView.OnQueryTextListener{
ImageView image;
TextView imageName, textViewPokazNagrody, textViewSchowajNagrody, textView_ownedPoints, opisPromocji, textViewDistanceFromPartner;
RelativeLayout kafelekPartneraLayoutNagrod, layoutSchowajNagrody, layoutPokazNagrody, relativeLayoutPartnera;
LinearLayout wariantNagrody;
public ViewHolder(View itemView) {
super(itemView);
layoutSchowajNagrody = itemView.findViewById(R.id.layout_tekstu_schowaj_nagrode);
layoutPokazNagrody = itemView.findViewById(R.id.layout_tekstu_pokaz_nagrode);
relativeLayoutPartnera = itemView.findViewById(R.id.relativeLayoutPartnera);
wariantNagrody = itemView.findViewById(R.id.wariantNagrody);
textView_ownedPoints = itemView.findViewById(R.id.textView_layoutPartner_ownedPoints);
opisPromocji = itemView.findViewById(R.id.opisPromcji);
image = itemView.findViewById(R.id.zdjecie);
imageName = itemView.findViewById(R.id.zdjecieTextView);
textViewPokazNagrody = itemView.findViewById(R.id.textViewPokazNagrody);
textViewSchowajNagrody = itemView.findViewById(R.id.textViewSchowajNagrody);
kafelekPartneraLayoutNagrod = itemView.findViewById(R.id.kafelekPartneraLayoutNagrod);
textViewDistanceFromPartner = itemView.findViewById(R.id.textView_partnerLayout_distanceFromPartner);
}
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
}
public RecyclerViewAdapter_partners(Context mContext, ArrayList<String> mPartners_Id, ArrayList<String> mPartners_Wid, ArrayList<String> mPartners_Name, ArrayList<String> mPartners_Longitude, ArrayList<String> mPartners_Latitude, ArrayList<String> mPartners_Desc, ArrayList<String> mPartners_Picture, ArrayList<String> mPartners_City, ArrayList<String> mPartners_Multiplier, ArrayList<String> mPartners_OwnedPoints ) {
this.mId = mPartners_Id;
this.mWId = mPartners_Wid;
this.mName = mPartners_Name;
this.mLongitude = mPartners_Longitude;
this.mLatitude = mPartners_Latitude;
this.mDesc = mPartners_Desc;
this.mPicture = mPartners_Picture;
this.mCity = mPartners_City;
this.mMultiplier = mPartners_Multiplier;
this.mOwnedPoints = mPartners_OwnedPoints;
this.mContext = mContext;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_layout_partner, parent, false);
ViewHolder holder = new ViewHolder(view);
mineLocation = new Location("mine");
mineLocation.setLongitude(Double.parseDouble(StartActivity.longitude));
mineLocation.setLatitude(Double.parseDouble(StartActivity.latitude));
return holder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
if(!mName.get(position).isEmpty()){
if(mOwnedPoints.get(position).isEmpty()) {
Picasso.get()
.load(StartActivity.partners_layout_url + mPicture.get(position))
.placeholder(R.drawable.error_image)
.fit()
.transform(new picasso_rounded_corners(50, 0, picasso_rounded_corners.CornerType.TOP_LEFT))
.into(holder.image);
holder.imageName.setText(mName.get(position));
holder.opisPromocji.setText(mDesc.get(position));
if(mOwnedPoints.get(position).isEmpty()){
holder.textView_ownedPoints.setText("0");
}else{
holder.textView_ownedPoints.setText(String.valueOf(mOwnedPoints.get(position)));
}
holder.wariantNagrody.removeAllViews();
holder.wariantNagrody.setOrientation(LinearLayout.VERTICAL);
holder.textViewPokazNagrody.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listaPartnerow listaPartnerow = new listaPartnerow();
Log.v("App", String.valueOf(listaPartnerow.listaOpisow.size()));
holder.wariantNagrody.setVisibility(View.VISIBLE);
holder.wariantNagrody.removeAllViews();
for (int i = 0; i < 4; i++) {
View child1 = LayoutInflater.from(mContext).inflate(R.layout.view_layout_extended_description_partner, null);
holder.wariantNagrody.addView(child1);
}
holder.layoutPokazNagrody.setVisibility(View.GONE);
holder.layoutSchowajNagrody.setVisibility(View.VISIBLE);
}
});
Location partnerLocation = new Location("partner");
partnerLocation.setLatitude(Double.parseDouble(mLatitude.get(position)));
partnerLocation.setLongitude(Double.parseDouble(mLongitude.get(position)));
float distanceInKilometers = mineLocation.distanceTo(partnerLocation)/1000;
DecimalFormat f = new DecimalFormat("##.0");
holder.textViewDistanceFromPartner.setText(String.valueOf(f.format(distanceInKilometers)) + " km");
holder.textViewSchowajNagrody.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.layoutPokazNagrody.setVisibility(View.VISIBLE);
holder.wariantNagrody.setVisibility(View.GONE);
holder.layoutSchowajNagrody.setVisibility(View.GONE);
}
});
} else {
Log.v("sorting", "Ilosc punktow w pozycji: " + position + " < 0");
}
}
}
@Override
public int getItemCount() {
return mName.size();
}
Есть идеи?
Большое спасибо:)