Android - ListView Add FooterView

摘要: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();
    }