我有一個從ArrayAdapter
派生的自定義適配器,它將覆蓋getView()
,我們將其稱爲CustomObjectAdapter
。我手動添加由適配器創建View
s到一個LinearLayout中象下面這樣:notifyDataSetChanged()不會在繪製到LinearLayout的適配器上調用getView()
m_adapter = new CustomObjectAdapter(this.getApplicationContext(),
R.layout.custom_object_layout,
m_customObjectArrayList);
m_linearLayout = (LinearLayout)findViewById(R.id.custom_object_list_linear_layout);
for (int i = 0; i < m_adapter.getCount(); i++) {
// Create the view for the custom object
View view = m_adapter.getView(i, null, null);
m_linearLayout.addView(view);
}
我填充LinearLayout
與View
s,而不是使用ListView
,因爲我它是包含在Fragment
中,我希望整個區域內可滾動 - 而不僅僅是ListView
內的區域。我在這個StackOverflow問題中找到了這個解決方案:Using a ListAdapter to fill a LinearLayout inside a ScrollView layout。
在這些View
s被填充的同一類中,將更新適配器的getView()
方法中使用的數據,然後我呼叫m_adapter.notifyDataSetChanged()
。然而,getView()
函數並未被調用。在代碼的另一個領域,我正在更新一個以相同方式連接到ListView
的適配器(而不是LinearLayout
),並且它正在更新。有誰知道我做錯了什麼?
替代方案,而不是解決方案,但您可以考慮在['ListView'](http://developer.android.com/reference/android/widget/ListView.html)中的'addHeaderView'和'addFooterView'未來您希望非列表項目也可以滾動。 – blahdiblah
@blahdiblah謝謝 - 我巧合地開始重構我的代碼,就像你在發佈這個問題後立即使用'addHeaderView'方法描述的一樣,現在它完美的工作!如果您將以上評論添加到您的答案中,我會接受它作爲解決方案。 – jokeefe