Android 使用ArrayAdapter过滤自定义listView中的文本和图像
当我使用ArrayList时,文本被过滤,但是图像显示不正确,图像的顺序保持不变 当我使用ArrayList时,文本没有被很好地过滤,所有元素都被过滤 我的代码有什么问题?请参阅下面ArrayList的代码 列表活动:Android 使用ArrayAdapter过滤自定义listView中的文本和图像,android,listview,filter,android-arrayadapter,Android,Listview,Filter,Android Arrayadapter,当我使用ArrayList时,文本被过滤,但是图像显示不正确,图像的顺序保持不变 当我使用ArrayList时,文本没有被很好地过滤,所有元素都被过滤 我的代码有什么问题?请参阅下面ArrayList的代码 列表活动: public class myListActivity extends ListActivity{ private ImageInDiscountCardListAdapter adapter; private EditText filterText; private Arra
public class myListActivity extends ListActivity{
private ImageInDiscountCardListAdapter adapter;
private EditText filterText;
private ArrayList<HashMap<String, String>> retailerList;
private HashMap<String, String> retailerInfo;
private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s){
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){
}
public void onTextChanged(CharSequence s, int start, int before, int count){
if (adapter!=null){
adapter.getFilter().filter(s);
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
addImageUrl();
this.filterText = (EditText) findViewById(R.id.name);
this.filterText.addTextChangedListener(filterTextWatcher);
this.adapter = new ImageInDiscountCardListAdapter(this, retailerList);
setListAdapter(adapter);
}
@Override
public void onDestroy(){
adapter.imageLoader.stopThread();
setListAdapter(null);
filterText.removeTextChangedListener(filterTextWatcher);
super.onDestroy();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id){
//this.filterText.setText(this.item.get(position));
}
public void addImageUrl(){
this.retailerList = new ArrayList<HashMap<String,String>>();
this.retailerInfo = new HashMap<String, String>();
retailerInfo.put("name", "Fnac");
retailerInfo.put("imageUrl", "http://android-france.fr/wp-content/uploads/2010/09/FNAC.jpg");
this.retailerList.add(retailerInfo);
// etc...
}
适配器:
public class ImageInDiscountCardListAdapter extends ArrayAdapter<HashMap<String, String>> {
private Activity activity;
private ArrayList<HashMap<String, String>> retailerList;
private static LayoutInflater inflater;
public ImageLoader imageLoader;
public ImageInDiscountCardListAdapter(Activity activity, ArrayList<HashMap<String, String>> retailerList) {
super(activity, android.R.layout.simple_list_item_1, retailerList);
this.activity = activity;
this.retailerList = retailerList;
inflater = (LayoutInflater)this.activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.imageLoader = new ImageLoader(this.activity.getApplicationContext());
}
public static class ViewHolder{
public TextView text;
public ImageView image;
}
public View getView(int position, View convertView, ViewGroup parent){
View view = convertView;
ViewHolder holder;
if(view == null){
view = inflater.inflate(R.layout.retailer_row, null);
holder = new ViewHolder();
holder.text=(TextView)view.findViewById(R.id.retailer_name);;
holder.image=(ImageView)view.findViewById(R.id.retailer_image);
view.setTag(holder);
}
else{
holder=(ViewHolder)view.getTag();
}
holder.text.setText(getItem(position).get("name"));
holder.image.setTag(this.retailerList.get(position).get("imageUrl"));
imageLoader.DisplayImage(this.retailerList.get(position).get("imageUrl"), activity, holder.image);
return view;
}
}
您的getview函数很奇怪。。。为什么您在中使用不同的代码 ifview==null{ 整个部分用于在视图进入时循环使用,因此您不需要实例化新视图 但是你用它来放自定义代码 这就是我的一个适配器getview函数的外观
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
ViewGroup p = parent;
LayoutInflater inflater;
// Create a new view only if we cannot recycle the one passed to this function.
if (v == null)
{
inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.artifact_list_item, p, false);
}
然后可以添加自定义代码
这可能就是我开始研究Sebastien的地方。您的getview函数很奇怪……为什么在中使用不同的代码 ifview==null{ 整个部分用于在视图进入时循环使用,因此您不需要实例化新视图 但是你用它来放自定义代码 这就是我的一个适配器getview函数的外观
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
ViewGroup p = parent;
LayoutInflater inflater;
// Create a new view only if we cannot recycle the one passed to this function.
if (v == null)
{
inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.artifact_list_item, p, false);
}
然后可以添加自定义代码
这可能就是我开始调查塞巴斯蒂安的地方