ListView with Load More按钮和Circle ProgressBar

时间:2016-08-22 09:12:26

标签: java android listview

我花了一个小时尝试添加“加载更多”Button并将ProgressBarListView的页脚无关。

假设的scinario就像这样:

单击该按钮时,ProgressBar正在下载20个项目时显示AsyncTask。当项目插入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);

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

2 个答案:

答案 0 :(得分:0)

您可以在同一个页脚视图中同时使用按钮和进度条,而不是根据需要删除和添加视图。

答案 1 :(得分:0)

我在没有添加/删除页脚的情况下找到了解决方案。只需将两个视图(Load More Button和ProgressBar)放在LinearLayout中。首次将linearlayout添加为listview页脚。然后通过更改可见性属性在按钮和进度条之间切换。

以下是更新后的代码:

布局/ 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);