【发布时间】:2019-01-12 22:44:20
【问题描述】:
我有一个 recyclerview 和一个搜索字段。 如果回收站未过滤,则单击打开所选项目的正确详细信息,但在过滤回收站后打开错误的详细信息。 适配器:
公共类 AllProductReyclerAdapter 扩展 RecyclerView.Adapter {
private BaseActivity mContext;
private OnClickItem mInterface;
private List<Produse> dataList;
public AllProductReyclerAdapter(BaseActivity con, List<Produse> mainCat, OnClickItem _interface) {
if(con!=null) {
mContext = con;
mInterface=_interface;
dataList=mainCat;
}
}
@Override
public int getItemCount() {
return dataList.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_category_items, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.tvCatMain.setText("Denumire :"+dataList.get(position).getDenumire());
holder.tvCode.setText("Code :"+dataList.get(position).getCod());
holder.tvDeposit.setText("Depozit :"+dataList.get(position).getDepozit());
holder.tvCant.setText("Cant :"+dataList.get(position).getCant());
holder.tvDate.setText(dataList.get(position).getPicture());
if (dataList.get(position).getPicture()!=null)
Picasso.get().load("http://mysite/test/img/"+dataList.get(position).getProcesare()+" "+dataList.get(position).getCuloare()+".jpg").into(holder.ivItem);
if (dataList.get(position).getPicture()!=null)
Picasso.get()
.load("http://mysite/test/img/"+dataList.get(position).getProcesare()+" "+dataList.get(position).getCuloare()+".jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder)
.into(holder.ivItem);
holder.linMain.setTag(dataList.get(holder.getAdapterPosition()));
holder.linMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mInterface.onListItemClick(view.getId(),position);
}
});
}
public class ViewHolder extends RecyclerView.ViewHolder {
public LinearLayout linMain;
public ImageView ivItem;
public TextView tvCatMain,tvCode,tvDeposit,tvCant,tvDate;
public ViewHolder(View view) {
super(view);
tvCatMain = view.findViewById(R.id.tvCatMain);
ivItem = view.findViewById(R.id.ivItem);
tvCode = view.findViewById(R.id.tvCode);
tvDeposit = view.findViewById(R.id.tvDeposit);
tvCant = view.findViewById(R.id.tvCant);
tvDate = view.findViewById(R.id.tvDate);
linMain = view.findViewById(R.id.linMain);
}
}
public void filterList(ArrayList<Produse> filterdNames) {
this.dataList = filterdNames;
notifyDataSetChanged();
}
}
这是片段:
公共类 DashboardFragment 扩展 BaseFragment {
private RecyclerView rlProductList;
private View ivFilter;
private AllProductReyclerAdapter adapter;
private List<Produse> list=new ArrayList<>();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_dashboard, container, false);
}
@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((MainActivity)getActivity()).setPageTitle("Produse in stoc");
rlProductList = view.findViewById(R.id.rlProductList);
ivFilter = view.findViewById(R.id.ivFilter);
ivFilter.setOnClickListener(this);
rlProductList.setLayoutManager(new LinearLayoutManager(baseActivity, LinearLayoutManager.VERTICAL, false));
adapter= new AllProductReyclerAdapter(baseActivity, list, new OnClickItem() {
@Override
public void onListItemClick(Object o, int position) {
Gson gson = new Gson();
String result = gson.toJson( list.get(position));
Bundle bundle=new Bundle();
bundle.putString("details",result);
ProductdetailsFragment fragment=new ProductdetailsFragment();
fragment.setArguments(bundle);
displayView(fragment);
}
});
rlProductList.setAdapter(adapter);
if (getArguments()!=null){
if (getArguments().getString("search")!=null){
list.clear();
list.addAll(Constants.filteredProduct);
adapter.notifyDataSetChanged();
}
}else{
list.clear();
list.addAll(Constants.allProduct);
adapter.notifyDataSetChanged();
}
EditText etFilter = view.findViewById(R.id.etFilter);
etFilter.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if (adapter!=null){
if (s.toString().length()>0)
filter(s.toString());
else
adapter.notifyDataSetChanged();
}
}
});
}
@Override
public void onClick(View view) {
super.onClick(view);
switch (view.getId()){
case R.id.ivFilter:
displayView(new ProductFilterFragment());
break;
}
}
private void filter(String names) {
//new array list that will hold the filtered data
ArrayList<Produse> filterdNames = new ArrayList<>();
//looping through existing elements
for (int i=0;i<list.size();i++) {
//if the existing elements contains the search input
if (list.get(i).getPicture()!=null&&list.get(i).getPicture().toLowerCase().contains(names.toLowerCase())) {
//adding the element to filtered list
filterdNames.add(list.get(i));
}
}
//calling a method of the adapter class and passing the filtered list
adapter.filterList(filterdNames);
}
}
【问题讨论】:
标签: android filter android-recyclerview adapter