代码之家  ›  专栏  ›  技术社区  ›  Masoom Badi

获取筛选列表视图中项目的错误位置

  •  -1
  • Masoom Badi  · 技术社区  · 6 年前

    我有一个列表,它在用户输入搜索字符串时过滤数据。当用户单击搜索项时,它将打开新的活动。问题是它打开了错误的意图。当用户单击项目时,位置会随着筛选列表视图的变化而变化。它总是返回第一个项目的意图,因为匹配的搜索结果总是首先显示。我少了一小部分,请帮忙。

    这是我的 自定义适配器

    public class Searchitemadapter extends BaseAdapter implements Filterable {
     private Home activity;
     private FriendFilter friendFilter;
     private ArrayList<B_allProducts> friendList;
     private ArrayList<B_allProducts> filteredList;
    
    public Searchitemadapter(Home activity, ArrayList<B_allProducts> friendList) {
        this.activity = activity;
        this.friendList = friendList;
        this.filteredList = friendList;
    
        getFilter();
    }
    
    @Override
    public int getCount() {
        return filteredList.size();
    }
    
    @Override
    public Object getItem(int i) {
        return filteredList.get(i);
    }
    
    @Override
    public long getItemId(int i) {
        return i;
    }
    
    @Override
    public View getView(int position, View view, ViewGroup parent) {
    
        final ViewHolder holder;
        final B_allProducts user = (B_allProducts) getItem(position);
    
        if (view == null) {
            LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.lv_container_searchitem, parent, false);
            holder = new ViewHolder();
            holder.name = (TextView) view.findViewById(R.id.lv_search_pname);
    
            view.setTag(holder);
        } else {
            // get view holder back
            holder = (ViewHolder) view.getTag();
        }
    
        holder.name.setText(user.getProductName());
    
        return view;
    }
    
    @Override
    public Filter getFilter() {
        if (friendFilter == null) {
            friendFilter = new FriendFilter();
        }
    
        return friendFilter;
    }
    
    static class ViewHolder {
        TextView name;
    }
    private class FriendFilter extends Filter {
    
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults = new FilterResults();
            if (constraint!=null && constraint.length()>0) {
                ArrayList<B_allProducts> tempList = new ArrayList<B_allProducts>();
    
                for (B_allProducts user : friendList) {
                    if (user.getProductName().toLowerCase().contains(constraint.toString().toLowerCase())
                            ||user.getProductKeywordG().toLowerCase().contains(constraint.toString().toLowerCase())
                            ||user.getProductKeyword().toLowerCase().contains(constraint.toString().toLowerCase()))
                    {
                        tempList.add(user);
                    }
                }
    
                filterResults.count = tempList.size();
                filterResults.values = tempList;
            } else {
                filterResults.count = friendList.size();
                filterResults.values = friendList;
            }
    
            return filterResults;
        }
    
        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            filteredList = (ArrayList<B_allProducts>) results.values;
            notifyDataSetChanged();
        }
      }
    }
    

    这是我的 列表视图Onitemlicklistener

     lvsearch.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
    
                String pos = aphashmap.get(position).get("ProductID");
                Intent i = new Intent(SearchableActivity.this, DisplaySingleProduct.class);
                i.putExtra("ProductID",pos);
    
                startActivity(i);
            }
        });
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Nikhil Vadoliya    6 年前

    您应该使用父对象和getadapter()方法来获得正确的位置。

    例如;

    lvsearch.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
            int positionOfItem=parent.getAdapter().getItem(position)
            String pos = aphashmap.get(positionOfItem).get("ProductID");
            Intent i = new Intent(SearchableActivity.this, DisplaySingleProduct.class);
            i.putExtra("ProductID",pos);
            startActivity(i);
        }
    });