2011-07-06 81 views
2

当我使用ArrayList <ArrayList<String>>时,文本被过滤,但图像显示不正确(图像的顺序保持不变)。使用ArrayAdapter在自定义列表视图中过滤文本和图像

当我使用ArrayList <HashMap<String, String>>时,文本没有很好地过滤(所有元素都被过滤)。

我的代码有什么问题? (请参阅代码如下ArrayList <HashMap<String, String>>。)

ListActivity:

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; 

    } 

} 

回答

0

你getview功能是奇怪......为什么你在做 不同的代码,如果(查看== 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); 
    } 

然后,您可以添加自定义代码。

这可能是我会开始调查塞巴斯蒂安的地方。

相关问题