【シナリオ要約】ListViewのFooterViewの可視性設定の問題

1445 ワード

ListViewのFooterViewは、一般的に、ユーザにいくつかのヒント情報を示すために使用される.
通常、このように使用されています.コードは次のとおりです.
// footer
footerLayout = new PullLoadingLayout(context, MODE_PULL_DOWN_TO_REFRESH, releaseLabel, 
    pullLabel, refreshingLabel, isShowHeader);
refreshableView.addFooterView(footerLayout);
まず、FooterViewオブジェクトを作成し、ListViewのaddFooterView()メソッドを呼び出します.これにより、このFooterViewはListViewの下部にロードされる.
ただし、FooterViewの表示状態を制御するには、footerLayout.setVisibility(View.VISIBLE)またはfooterLayout.setVisibility(View.GONE)を呼び出すと機能しないという問題があります.
いくつかの資料を調べて、多くの人がこの問題に遭遇しました.これはListViewのバグのはずです.
ソリューション
footerLayoutの外側にある「親コンテナ」をカバーします.コードは次のとおりです.
// footer
footerLayout = new PullLoadingLayout(context, MODE_PULL_DOWN_TO_REFRESH, releaseLabel,
    pullLabel, refreshingLabel, isShowHeader);
footerLayoutHolder = new FrameLayout(getContext());
footerLayoutHolder.addView(footerLayout, 0, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
    FrameLayout.LayoutParams.WRAP_CONTENT));
// add footer
refreshableView.addFooterView(footerLayoutHolder);
上のコードから分かるように、footerLayoutオブジェクトを作成した後、footerLayoutHolderというFrameLayoutオブジェクトを作成し、footerLayoutHolderオブジェクトで「小包」footerLayoutを作成します.
このようにFooterViewの表示状態を制御するにはfooterLayoutのsetVisibility()メソッドを直接呼び出せばよい.
//   
footerLayout.setVisibility(View.VISIBLE);
//   
footerLayout.setVisibility(View.GONE);