2016-08-22 37 views
1

我花了一個小時試圖添加「加載更多」Button和不確定ProgressBar到我的ListView的頁腳。ListView加載更多按鈕和循環ProgressBar

假想的scinario是這樣的:

當單擊該按鈕,ProgressBarAsyncTask被下載20個項目被顯示。當項目被插入到ListView時,ProgressBar被解除,並且Button再次出現在頁腳中。 我來到了以下解決方案,如果你有更好的解決方案將是很好:

佈局/ progress_bar.xml

<?xml version="1.0" encoding="utf-8"?> 
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/load_progress" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:indeterminate="true" 
    /> 

並假設你在活動中的以下字段:

private ListView listview; 
private Button loadMoreButton; 
private ProgressBar progressBar; 

在準備好你的列表視圖之後,添加這樣的頁腳(在activity.onCreate()的末尾):

loadMoreButton = new Button(this); 
    loadMoreButton.setText("Load More"); 
    progressBar = (ProgressBar) LayoutInflater.from(this).inflate(R.layout.progress_bar, null); 

    loadMoreButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //downloadItems(); 
      listview.removeFooterView(loadMoreButton); 
      listview.addFooterView(progressBar); 

     } 
    }); 

數據準備就緒(第一頁或後續頁面)時,請在適配器更新後調用以下內容。

 //adapter.notifyDataSetChanged(); 
    listview.removeFooterView(progressBar); 
    listview.addFooterView(loadMoreButton); 

如果您有更好的解決方案,請在答案中分享。

+0

而不是顯示按鈕加載更多,你可以檢查ScrollStateChange氣象用戶的是在底部與否, 如果項目的發現,最後一個索引,那麼你可以顯示在頁腳進步,當加載完全移除它,並顯示您的數據 –

+0

我想讓用戶點擊**加載更多**來減少對服務器的調用次數,以防他一直在滾動。 –

回答

0

我來到沒有添加/刪除頁腳的解決方案。只需在LinearLayout中放置兩個視圖(Load More Button and ProgressBar)即可。僅將第一次添加爲列表視圖頁腳。然後通過更改可見性屬性在按鈕和進度條之間切換。

這裏是更新的代碼:

佈局/ list_footer.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
<Button 
    android:id="@+id/load_more_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:visibility="gone" 
    android:text="Load More"/> 

<ProgressBar android:id="@+id/load_progress" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:visibility="gone" 
     android:indeterminate="true" /> 
</LinearLayout> 

調用此方法在Activity.onCreate()的末尾添加尾和處理按鈕點擊(負載數據,隱藏按鈕並顯示進度)。

private void prepareListFooter() { 

    View view = (View) LayoutInflater.from(this).inflate(R.layout.list_footer, null); 


    loadMoreButton = (Button) view.findViewById(R.id.load_more_button); 
    progressBar = (ProgressBar) view.findViewById(R.id.load_progress); 
    listview.addFooterView(view); 
    loadMoreButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //downloadMore(); 
      loadMoreButton.setVisibility(View.GONE); 
      progressBar.setVisibility(View.VISIBLE); 
     } 
    }); 
} 

此代碼也適配器更改後顯示按鈕並隱藏進度。

adapter.notifyDataSetChanged(); 
loadMoreButton.setVisibility(View.VISIBLE); 
progressBar.setVisibility(View.GONE); 
0

而不是刪除和添加一個視圖作爲頁腳..您可以在同一個頁腳視圖中同時具有按鈕和進度條,並根據需要顯示可見性和可見性GONE。

+0

我試圖使用'View.setVisiblity(View.GONE)'。但是因爲我添加了兩個頁腳Button頁腳和ProgressBar頁腳到列表視圖,所以即使視圖是GONE,listview也會保存每個頁腳的空間。 當視圖結束時,其空間仍然出現在可見視圖的上方或下方。 –