2012-03-09 49 views
1

嗨標準我有一個從數組填充這樣一個數組適配器陣列中的適配器的紀錄:如何不會根據IF android系統

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; 
    } 
} 

的問題是,與類型等於對象仍然以行的形式輸出。

此外,我嘗試從IF上述數組中刪除的對象像這樣:

迭代器ITER = m_orders.iterator(); (iter.hasNext()){ PlaceDetail vs =(PlaceDetail)iter.next(); (vsgetType()。equals(「place」)){ m_orders.remove(vs); }}

  m_adapter.notifyDataSetChanged(); 

當我這樣做,我得到一個併發編輯例外。

我如何限制顯示某種類型的行?

謝謝!

回答

0

回答你的第二個問題,你不允許在迭代器遍歷它的時候直接修改列表,因爲這樣做理論上會導致迭代器以多種方式失敗(跳過元素,陷入無窮大循環)。有,然而,在迭代一個remove()方法,將刪除的最後一個項目從明年(),它應該做回你想要的位置:

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

接近你的問題的另一種方法可能會定義一個遍歷列表的遊標,只停留在你想要的項目上,然後使用CursorAdapter而不是ArrayAdapter。這樣做有點多,但具有不需要任何前期處理的優點,所以可能會更加靈活。