【发布时间】:2017-12-05 04:49:16
【问题描述】:
我已经在我的应用中实现了 SearchView。但我面临的问题是回收器视图在过滤后返回错误的位置。过滤后如何获得确切位置。
这是我的适配器代码:-
public class UserListAdapter extends Adapter<UserListAdapter.DataObjectHolder> implements Filterable {
private static MyClickListener myClickListener;
public Activity activity;
Bitmap bitmap;
ImageView imgUserBig;
TextView txtUserName;
RelativeLayout userProfileView;
private ArrayList<DataObject> mArrayList;
private ArrayList<DataObject> mFilteredList;
public UserListAdapter(Activity a, ArrayList<DataObject> d, ImageView mImgUserBig, RelativeLayout viewLinear, TextView txtUsername) {
this.activity = a;
this.mArrayList = d;
this.mFilteredList = d;
this.imgUserBig = mImgUserBig;
this.userProfileView = viewLinear;
this.txtUserName = txtUsername;
}
public DataObjectHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new DataObjectHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.raw_user_list, parent, false));
}
public void onBindViewHolder(final DataObjectHolder holder, final int position) {
holder.txtName.setText((mFilteredList.get(position)).getmName());
holder.txtUserName.setText((mFilteredList.get(position)).getmUsername());
Glide.with(activity.getApplicationContext()).load((mFilteredList.get(position)).getmImage()).into(holder.imgUser);
Glide.with(activity).load((mFilteredList.get(position)).getmImage()).asBitmap().into(new SimpleTarget<Bitmap>(Integer.MIN_VALUE, Integer.MIN_VALUE) {
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
bitmap = resource;
(mFilteredList.get(position)).setBitmap(bitmap);
}
});
holder.imgUser.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if ((mFilteredList.get(position)).getBitmap() != null && imgUserBig != null) {
zoomImageFromThumb(holder.imgUser, (mFilteredList.get(position)).getBitmap(), (mFilteredList.get(position)).getmImage(), (mFilteredList.get(position)).getmUsername());
}
}
});
}
public int getItemCount() {
return mFilteredList.size();
}
public void setOnItemClickListener(MyClickListener myClickListener) {
UserListAdapter.myClickListener = myClickListener;
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
mFilteredList = mArrayList;
}else {
ArrayList<DataObject> filteredList = new ArrayList<>();
for (DataObject userData : mArrayList) {
if (userData.getmUsername().toLowerCase().contains(charString) || userData.getmName().toLowerCase().contains(charString)) {
filteredList.add(userData);
}
}
mFilteredList = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = mFilteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mFilteredList = (ArrayList<DataObject>) results.values;
notifyDataSetChanged();
}
};
}
public interface MyClickListener {
void onItemClick(int i, View view);
}
public Object getItem(int position) {
return mFilteredList.get(position);
}
public class DataObjectHolder extends ViewHolder implements OnClickListener {
ImageView imgUser;
TextView txtName;
TextView txtUserName;
public DataObjectHolder(View itemView) {
super(itemView);
txtName = (TextView) itemView.findViewById(R.id.txtname);
txtUserName = (TextView) itemView.findViewById(R.id.txtusername);
imgUser = (ImageView) itemView.findViewById(R.id.img_user);
itemView.setOnClickListener(this);
}
public void onClick(View v) {
UserListAdapter.myClickListener.onItemClick(getPosition(), v);
}
}}
我正在调用 getPosition() 方法来获取项目的位置,但它返回的是旧位置,而不是过滤后的位置。任何帮助将不胜感激。
【问题讨论】:
标签: java android android-recyclerview