如何根据android中的IF条件在数组适配器中显示记录

时间:2012-03-09 18:22:17

标签: android android-arrayadapter

您好我有一个数组适配器,从这样的数组填充:

 private class PlacesDetailAdapter extends ArrayAdapter<PlaceDetail> {

    private ArrayList<PlaceDetail> items;

    public PlacesDetailAdapter(Context context, int textViewResourceId, ArrayList<PlaceDetail> items) {


        super(context, textViewResourceId, items);


        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.placedetail_list_row, null);
            }
            PlaceDetail o = items.get(position);

            if (!o.getType.equals("place") {
                    TextView tt = (TextView) v.findViewById(R.id.placeDetailTitle_Txt);
                    tt.setText(o.getName());

                    ImageView iv = (ImageView) v.findViewById(R.id.placeDetailIcon_Img);
                    iv.setImageBitmap(o.getImage);

            }
            return v;
    }
}

问题是类型等于place的对象仍然作为行输出。

此外,我尝试从IF上方的数组中删除对象,如下所示:

Iterator iter = m_orders.iterator();                 而(iter.hasNext()){                     PlaceDetail vs =(PlaceDetail)iter.next();                     if(vs.getType()。equals(“place”)){                         m_orders.remove(VS);                     }                 }

            m_adapter.notifyDataSetChanged();

当我这样做时,我得到一个并发的编辑异常。

我如何简单地限制显示某种类型的行?

谢谢!

1 个答案:

答案 0 :(得分:0)

回答你的第二个问题,你不允许在迭代器遍历它时直接修改列表,因为理论上这样做会导致迭代器以多种方式失败(跳过元素,卡在无限循环中) )。但是,在Iterator上有一个remove()方法,它将删除next()返回的最后一项,这应该在你想要的地方执行:

Iterator iter = m_orders.iterator(); 
while(iter.hasNext()){ 
    PlaceDetail vs = (PlaceDetail)iter.next(); 
    if(vs.getType().equals("place")) { 
         iter.remove();
    } 
}
m_adapter.notifyDataSetChanged();

解决问题的另一种方法可能是定义一个遍历列表的Cursor,只停留在你想要的项目上,然后使用CursorAdapter而不是ArrayAdapter。这是一项更多的工作,但它的优势在于它不需要任何前期处理,因此可能会更具响应性。