Как изменить два массива в onQueryTextChange? - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь создать фильтр для моих 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();
}

Есть идеи? Большое спасибо:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...