0

我正在嘗試使用CommonsWare的MergeAdapter類並取得了有限的成功。特別是,我不確定是否1)我的ArrayAdapter適合使用,2)如果我正確添加它,3)如果我正在做所有必要的事情來連接一切。這個ArrayAdapter適合與CommonsWare MergeAdapter一起使用嗎?如果是這樣,爲什麼它不起作用?

這裏是我的ArrayAdapter子類:

class PDLAdapter extends ArrayAdapter<PartnerDisease> { 

    public PDLAdapter(final Context context) { 
     super(context, 0); 
    } 

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 
     ViewHolder viewHolder; 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.partnerdisease_list_item, null); 
      viewHolder = new ViewHolder(convertView); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.populateViews(getItem(position)); 

     return convertView; 
    } 

} 

這裏是我的對象StructuredSubDisease(這個名字是沒有意義的,如果你真的認爲這是一個包含子病的頂級對象,但不管):

class StructuredSubDisease { 
    public String headingText; 
    public ArrayList<PartnerDisease> subDiseases; 

    public View headingView() { 
     View returnView = mInflater.inflate(R.layout.partnerdisease_list_item, null); 
     TextView t = (TextView) returnView.findViewById(R.id.tv_displayname); 
     t.setText(headingText); 
     return returnView; 
    } 
} 

......這裏是「魔法」應該發生的地方。

  for (StructuredSubDisease s : subDiseaseList) { 
       mMergeAdapter.addView(s.headingView()); // @Alex, <--- thing 1 

       PartnerDiseaseListAdapter adapter = new PartnerDiseaseListAdapter(this); 

       for (PartnerDisease p : s.subDiseases) { 
        adapter.add(p); 
       } 

       mMergeAdapter.addAdapter(adapter); // <--- and thing 2 
      } 

Log蓋德計數:

Log.i("mergecount", "" + mMergeAdapter.getCount()); 

這將返回1,在那裏我會想到2

編輯:我忘了提及,這是headingView()顯示與正確的標題文本,但它下面沒有列表。

我哪裏錯了?

+0

爲什麼期望2? – 2012-04-24 19:30:54

+0

@Alex,因爲我添加了兩個東西 - headingView()(它被呈現)和'adapter'(它默默地失敗)。 – 2012-04-24 19:34:18

回答

1

我ArrayAdapter是適合

似乎確定。

如果我正確

加入它似乎確定。

,如果我做的一切必要接線的一切行動

你沒有任何疾病,顯然。

,因爲我加了兩個東西 - headingView()(這是渲染)和該適配器(即靜靜地失敗)

getCount()返回應該在你的ListView總的行數,不添加到MergeAdapter的東西的數量。就你而言,看起來你沒有疾病。

首先將PartnerDiseaseListAdapter直接放入ListView,忽略MergeAdapter。得到那個工作。然後,切換回MergeAdapter

+0

謝謝,你說得對。問題是這個清單。愚蠢的我不檢查。是否有一種方法可用於獲取添加到「MergeAdapter」的視圖+適配器的數量,或者是一些通常無用的內容? – 2012-04-24 20:32:09

+0

@ jshin47:我沒有辦法獲得添加件的帳戶,因爲我沒有看到或聽說過需要。如果您有具體的場景,請在項目上提出問題。添加它很簡單,但我喜歡保持精益API。 – CommonsWare 2012-04-24 20:38:09