摘要:Android - ListView Add FooterView
View mFooterView = null;
.... 略
mFooterView = ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.foorter null, false);
mFooterView.setVisibility(View.INVISIBLE);
mListView.addFooterView(mFooterView);
因為我需要做一個隱藏的Footer來佔位子,所以才使用INVISIABLE。
因為有一個固定要在下方的資訊,但這個資訊,會檔住ListView的資料,所以我就製造了一個跟資訊一樣大的資料,放到FooterView裡,這樣ListView的資訊就不會被擋住。
但當切換類別,重新生成ListView的資料時,卻又造成隱藏的Footer又顯示了,
所以改為,當變更資料時,移除Footer,再加入Footer
mListView.setAdapter(listAdapter);
if(mFooterView!=null) {
mFooterView.setVisibility(View.INVISIBLE);
mListView.removeFooterView(mFooterView);
mListView.addFooterView(mFooterView);
}
Footer如果是在setAdapter 之後加入的話,會無法立即的更新,
網路有解法如下
http://www.myandroidsolutions.com/2013/04/06/android-expandablelistview-add-footer-dynamically/
他會在setAdapter之前,先加入,後移除,在使用displayFooter,先停三秒,再加入。
可能有ListView正在處理畫面的關係,才導致,沒這麼快速的顯示。
需要一段停頓時間處理。
/**
* Displays the footer on the screen after 3 seconds.
*/
private void displayFooterAfterDelay(){
// We create a thread that will sleep for 3 seconds.
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 3 seconds have passed so we have to make the adapter to be displayed on the screen.
// The UI elements cannot be displayed on this thread so we have to make them to be displayed
// on the MAIN THREAD. To do this we have to use the "runOnUiThread() method"
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivity.this, "Footer displayed!", Toast.LENGTH_SHORT).show();
mExpandableList.addFooterView(footerLayout);
}
});
}
}).start();
}