Android 在ListView中获取位置筛选项
如何从过滤的listview中获取项目位置?例如,我有10项列表视图(俱乐部1.2.3…)。在过滤器“4”之后,我的listview上有Club 4,int position返回0,但我需要返回3(从0开始计数) 编辑: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
我认为您需要创建扩展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();
}