2016-08-22 19 views
1

のフッターに「Load More」を追加しようとしました。Buttonと不確定ProgressBarです。リストビューのボタンとサークルをプログレスバーで表示

はずscinarioは、このように動作します:AsyncTaskは20個のアイテムをダウンロードしている間ボタンをクリックすると

ProgressBarが示されています。項目が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

私はユーザーがいつもスクロールしていた場合に備えて、** Load More **をクリックしてサーバーへのコール数を減らしたいと思っています。 –

答えて

0

私はフッターを追加/削除せずに解決策になった。 LinearLayoutに2つのビュー(Load More ButtonとProgressBar)を配置するだけです。 linearlayoutを最初にリストビューフッターとして追加します。次に、visibilityプロパティを変更して、ボタンとプログレスバーを変更します。ここで

が更新されたコードです:

レイアウト/ 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

フッターとしてビューを削除して追加する代わりに、ボタンとプログレスバーの両方を同じフッタービューに表示し、要件に応じて視認性を視認性と視認性を向上させることができます。

+0

私は 'View.setVisiblity(View.GONE)'を使ってみました。しかし、2つのフッタButton FooterとProgressBarフッタをlistviewに追加したので、リストビューは、ビューがGONEであっても各フッタのスペースを節約します。 ビューがGONEになると、その領域は可視ビューの上または下に表示されたままになります。 –

関連する問題