我有一個CursorAdapter與newView()和bindView()覆蓋。問題是bindView()沒有正確映射到由newView()創建的視圖。CursorAdapter bindView()沒有正確映射到從newView返回的視圖()
newView()返回根據遊標值從不同佈局膨脹的兩個不同視圖,如下所示。
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent){
View view = null;
int who = //... get a value from cursor
switch(who){
case 0:
view = LayoutInflater.from(context).inflate(R.layout.first, null);
view.setTag("case 0"); // for bindView() mapping inspection
break;
case 1:
view = LayoutInflater.from(context).inflater(R.layout.second, null);
view.setTag("case 1"); // for bindView() mapping inspection
break;
default:
break;
}
return view;
}
然後,bindView()就像平常一樣。從遊標獲取值並將值設置爲從newView()返回的視圖中的UI元素。沒什麼特別的。我在newView()中放置了一個顯示視圖標記集的bindView()日誌。日誌顯示bindView()在調用時不會獲得所需的視圖。
我認爲,當bindView()被調用時,它綁定到現有的視圖,如果有任何內存效率。所以我認爲bindView會獲得一個可能由row _ID標識的特定視圖。但它似乎在被調用時,它只能獲得任何現有的視圖。
如何讓bindView在視圖可以有不同的佈局時獲取具有特定佈局的指定視圖?
謝謝你的建議。我認爲這是解決問題的方法。我有另一個問題。 getItemViewType何時調用與newView有關? – seongjoo 2013-05-02 05:00:24
@seongjoo - 在任何視圖被誇大之前調用'getItemViewType'。流程是'getItemViewType'(確定是否將一個非空的'convertView'傳遞給'getView') - >'getView' - >(如果'convertView == null' then'newView') - >'bindView' – ianhanniballake 2013-05-02 05:22:50
'覆蓋getViewTypeCount'解決了我花了2個小時的問題 – 2016-10-16 09:38:37