我花了一个小时尝试添加“加载更多”Button
并将ProgressBar
与ListView
的页脚无关。
假设的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);
如果您有更好的解决方案,请在答案中分享。
答案 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);