我正在尝试为我的2个数组列表创建过滤器。 在下面将所有内容汇总在一起会更容易:
这是我的数组列表的样子:
[1] Names:
1: McDonals
2: KFC
3: H&M
4: Harrods
5: Test
etc...
和另一个数组列表:
[2] Icons:
1: url1
2: url2
3: url3
4: url4
5: url5
我将这两个列表都放在oder的recyclerview中(在Android Studio中),以显示具有名称的[1] arraylist的第一个位置和带有图标的[2] arraylist的第一个位置,看起来像:
[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”中放入它时,它会从arraylist中删除所有字符串,这些字符串的标题中没有它,但是我仍然带有图标的arraylist。键入“ Harr”会删除“ McDonals”,“ KFC”,“ H&M”,“ Test”,但是我仍然有5个位置的arraylist,并且自动在我的基本arraylist中的位置“ 4”的我的“ Harr”自动获取图标从带有图标的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();
}
有什么主意吗? 非常感谢:)