问题描述
我的 Android 应用程序中有一个显示航班的回收站视图,我想通过输入航班号使用顶部的搜索栏搜索特定航班。当我搜索航班时,我在回收站视图中得到了想要的结果,但是当我在回收站视图中单击特定的航班元素时,该元素的位置被错误地捕获。例如如果我在搜索后单击第一个飞行元素,它会在我搜索任何内容之前向我显示第一个飞行元素的详细信息,因此回收器视图不会在适配器上正确地动态加载位置。我该如何解决这个问题?
飞行适配器
public class FlightAdapter extends RecyclerView.Adapter<FlightAdapter.FlightViewHolder> {
private ArrayList<FlightItem> flightlist;
private OnItemClickListener mListener;
private Context mContext;
public FlightAdapter(ArrayList<FlightItem> flightlist,Context context) {
this.flightlist = flightlist;
this.mContext = context;
}
public interface OnItemClickListener {
void onItemClick(int position);
}
public void setonItemClickListener(OnItemClickListener listener) {
mListener = listener;
}
public static class FlightViewHolder extends RecyclerView.ViewHolder {
public TextView departureDate;
public TextView flightNumber;
public FlightViewHolder(@NonNull View itemView,OnItemClickListener listener,Context context) {
super(itemView);
departureDate = itemView.findViewById(R.id.departureDate);
flightNumber = itemView.findViewById(R.id.flightNumber);
itemView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null) {
int position = getAdapterPosition();
if(position != RecyclerView.NO_POSITION) {
listener.onItemClick(position);
}
}
}
});
}
}
@NonNull
@Override
public FlightViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.flight_listing_item,parent,false);
FlightViewHolder fvh = new FlightViewHolder(v,mListener,mContext);
return fvh;
}
@Override
public void onBindViewHolder(@NonNull FlightViewHolder holder,int position) {
FlightItem currentItem = flightlist.get(position);
holder.departureDate.setText(currentItem.getDepartureDate());
holder.flightNumber.setText(currentItem.getFlightNumber());
}
@Override
public int getItemCount() {
return flightlist.size();
}
//SEARCH FILTERING
public void filterList(ArrayList<FlightItem> filteredList) {
flightlist = filteredList;
notifyDataSetChanged();
}
}
活动
searchText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after) {
}
@Override
public void onTextChanged(CharSequence s,int before,int count) {
}
@Override
public void afterTextChanged(Editable s) {
filter(s.toString());
}
});
private void filter(String text) {
ArrayList<FlightItem> filteredList = new ArrayList<>();
for(FlightItem item : flightItems) {
// String myitem = item.getFlightNumber().replaceAll(" ","");
if(item.getFlightNumber().toLowerCase().contains(text.toLowerCase())){
filteredList.add(item);
}
}
mAdapter.filterList(filteredList);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)