【发布时间】:2017-05-26 09:28:32
【问题描述】:
这是我的 ListView 适配器类,
需要帮助,我在过滤列表视图后获得原始位置,而不是过滤结果的位置。代码如下,请过目,如有疑问请追问。
// This is my Adapter Class for ListView
public class mAdapter extends BaseAdapter implements Filterable {
ArrayList<MlaData> dats;
public ArrayList<MlaData> filterList;
enter code here
CustomFilter filter;
Context c;
ImageLoader imageLoader;
public mAdapter(Context ctx,ArrayList<MlaData> dats){
this.c=ctx;
this.dats=dats;
this.filterList = dats;
}
@Override
public int getCount() {
return dats.size();
}
@Override
public Object getItem(int position) {
return dats.get(position);
}
@Override
public long getItemId(int position) {
int itemID;
// orig will be null only if we haven't filtered yet:
if (filterList == null)
{
itemID = position;
}
else
{
itemID = dats.indexOf(dats.get(position));
}
return itemID;
}
@Override
public Filter getFilter() {
if(filter==null)
{
filter = new CustomFilter();
}
return filter;
}
class CustomFilter extends Filter{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if(constraint!=null && constraint.length()>0)
{
constraint = constraint.toString().toUpperCase();
ArrayList<MlaData> filters = new ArrayList<MlaData>();
//Filtering
for(int i=0;i<filterList.size();i++)
{
if(filterList.get(i).getName().toUpperCase().contains(constraint)){
MlaData MlaDat = new MlaData(filterList.get(i).getName(),filterList.get(i).getImageUrl(),filterList.get(i).getArea(),filterList.get(i).getId(),filterList.get(i).getEmail());
filters.add(MlaDat);
}
results.count=filters.size();
results.values=filters;
}
}else {
results.count=filterList.size();
results.values=filterList;
}
return results;
}@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
dats=(ArrayList<MlaData>)results.values;
notifyDataSetChanged();
}
}
MainActivity.java (仅限 ListView OnClick 功能):
private ArrayList<MlaData> MlaDats = new ArrayList<MlaData>();
private String MlaNameString, MlaImageString, MlaIdString, MlaEmailString, MlaAreaString;
private GridView listView;
private mAdapter adapt;
private SearchView sv;
listView = (GridView) findViewById(R.id.mldata);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int posi = (int) adapt.getItemId(position);
Intent intent = new Intent(Rajasthan_Mla.this, MainActivity.class);
// int pos = (int) adapt.getItemId(position);
String MLAID = MlaDats.get(posi).getId();
String MLANAME = MlaDats.get(posi).getName();
String MLAEMAIL = MlaDats.get(posi).getEmail();
String MLAIMAGE = MlaDats.get(posi).getImageUrl();
String MLAAREA=MlaDats.get(posi).getArea();
intent.putExtra("MLA_ID", MLAID);
intent.put
Extra("MLA_NAME", MLANAME);
intent.putExtra("MLA_EMAIL", MLAEMAIL);
intent.putExtra("MLA_IMAGE", MLAIMAGE);
intent.putExtra("MLA_AREA", MLAAREA);
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("Mukesh", 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("MLAID", MLAID);
editor.putString("MLANAME",MLANAME);
editor.commit();
startActivity(intent);
}
});
数据模型类:
package com.wdm.mukku.wdm;
public class MlaData {
private String name;
private String imageUrl;
private String area;
private String email;
private String id;
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return imageUrl;
}
public void setImage(String image) {
this.imageUrl = image;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public MlaData(String name,String image,String area,String id,String email) {
this.name=name;
this.imageUrl=image;
this.area=area;
this.id=id;
this.email=email;
}
public MlaData() {
}
}
【问题讨论】:
-
你需要用 parent.getAdapter().getItem(position);您需要引用新过滤列表的适配器而不是列表视图
-
您需要一些自定义适配器,例如:
class Adapter extendsMatchableArrayAdapter<MlaData> { ...并覆盖其onBind()和matches()方法,而不是努力实现BaseAdapter。 -
在
onItemClick内只需致电adapt.getItem(position) -
@pskink 你能帮我如何根据我的代码修改此代码。
-
抱歉,无法修改这些功能,能否提供示例代码。谢谢
标签: android listview filter position android-adapter