Android 在ListView中获取位置筛选项

Android 在ListView中获取位置筛选项,android,listview,filter,position,Android,Listview,Filter,Position,如何从过滤的listview中获取项目位置?例如,我有10项列表视图(俱乐部1.2.3…)。在过滤器“4”之后,我的listview上有Club 4,int position返回0,但我需要返回3(从0开始计数) 编辑: 我认为您需要创建扩展ArrayAdapter的自定义ArrayAdapter并实现Filterable,然后使用扩展Filter的自定义Filter重写方法getFilter 您可以保留原始数组,并使用普通数组进行过滤,这样您就可以搜索值,我给您举一个例子 阵列适配器 publ

如何从过滤的listview中获取项目位置?例如,我有10项列表视图(俱乐部1.2.3…)。在过滤器“4”之后,我的listview上有Club 4,int position返回0,但我需要返回3(从0开始计数)

编辑:


我认为您需要创建扩展ArrayAdapter的自定义ArrayAdapter并实现Filterable,然后使用扩展Filter的自定义Filter重写方法getFilter

您可以保留原始数组,并使用普通数组进行过滤,这样您就可以搜索值,我给您举一个例子

阵列适配器

public PickerAdapter(Context context, ArrayList<String>) {
    super(context, R.layout.picker_detail_row, alItemsPicker);
    this.alItemsPicker = alItemsPicker; //This array is variable, and modified by CustomFilter
    this.alItemsPickerInicial = alItemsPicker; //This array is final, and its value is set in your constructor
}
然后在您的OnlistItem中单击

public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);

int realposition = alItemsPickerInicial.indexOf(alItemsPicker.get(position))

....your custom code 
自定义过滤器

    private class PickerAdapterFilter extends Filter {

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults resultados = new FilterResults();
        if (constraint==null||constraint.length()==0) {
            resultados.count = alItemsPickerInicial.size();
            resultados.values = alItemsPickerInicial;
        } else {
            ArrayList<String> tmpAlItemsPicker = new ArrayList<String>();
                for (String sItemPicker : alItemsPickerInicial) {
                    if (sItemPicker.contains(constraint)) {
                        tmpAlItemsPicker.add(htItemPicker);
                    }
                }
            resultados.count = tmpAlItemsPicker.size();
            resultados.values = tmpAlItemsPicker;
        }
        return resultados;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        alItemsPicker = (ArrayList<String>)results.values;
        if (results.count==0) {
            notifyDataSetInvalidated();
        } else {
            notifyDataSetChanged();
        }
    }

}
私有类PickerAdapterFilter扩展筛选器{
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults resultados=新的FilterResults();
if(constraint==null | | constraint.length()==0){
resultados.count=alItemsPickerInicial.size();
resultados.values=alitemspickerinical;
}否则{
ArrayList tmpAlItemsPicker=新的ArrayList();
对于(字符串sItemPicker:alItemsPickerInicial){
if(sItemPicker.contains(约束)){
tmpAlItemsPicker.add(htItemPicker);
}
}
resultados.count=tmpAlItemsPicker.size();
resultados.values=tmpAlItemsPicker;
}
返回resultados;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
alItemsPicker=(ArrayList)results.values;
if(results.count==0){
notifyDataSetionValidated();
}否则{
notifyDataSetChanged();
}
}
}

我用不同的方式解决了这个问题。我在位置使用项目,而不是项目的位置

public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    FragmentManager fragmentManager = getFragmentManager();

    Object item = adapter.getItem(position);

    if(item.equals(datasource[0])) fragmentManager.beginTransaction().replace(R.id.content_frame, new Club1Fragment()).commit();
    if(item.equals(datasource[1])) fragmentManager.beginTransaction().replace(R.id.content_frame, new Club2Fragment()).commit();

    Toast.makeText(getActivity(),item.toString(), Toast.LENGTH_SHORT).show();
}

你能提供更多关于你过滤列表的方式的信息吗?好的,编辑好了…………谢谢你的回答,但我正在努力让它更简单。搜索过滤器正在创建一个新的listview来代替我的原始列表,所以我需要获取对这个原始列表的引用或制作一个副本,我想就是这样;)
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);

int realposition = alItemsPickerInicial.indexOf(alItemsPicker.get(position))

....your custom code 
    private class PickerAdapterFilter extends Filter {

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults resultados = new FilterResults();
        if (constraint==null||constraint.length()==0) {
            resultados.count = alItemsPickerInicial.size();
            resultados.values = alItemsPickerInicial;
        } else {
            ArrayList<String> tmpAlItemsPicker = new ArrayList<String>();
                for (String sItemPicker : alItemsPickerInicial) {
                    if (sItemPicker.contains(constraint)) {
                        tmpAlItemsPicker.add(htItemPicker);
                    }
                }
            resultados.count = tmpAlItemsPicker.size();
            resultados.values = tmpAlItemsPicker;
        }
        return resultados;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        alItemsPicker = (ArrayList<String>)results.values;
        if (results.count==0) {
            notifyDataSetInvalidated();
        } else {
            notifyDataSetChanged();
        }
    }

}
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    FragmentManager fragmentManager = getFragmentManager();

    Object item = adapter.getItem(position);

    if(item.equals(datasource[0])) fragmentManager.beginTransaction().replace(R.id.content_frame, new Club1Fragment()).commit();
    if(item.equals(datasource[1])) fragmentManager.beginTransaction().replace(R.id.content_frame, new Club2Fragment()).commit();

    Toast.makeText(getActivity(),item.toString(), Toast.LENGTH_SHORT).show();
}