ListView加载中的Android进度条

时间:2013-03-04 12:24:04

标签: android android-listview android-asynctask

我想添加我的应用ListView,在LinearLayout内,加载时代替列表有进度条。这类似于系统应用程序,您可以在其中管理您的应用程序。

我找到了一些关于它的信息,但没有一个是好的。看起来最好的一个是创建两个布局(一个带有进度条,另一个带有ListView),然后放在onPreExecute()(我使用AsyncTask)显示进度条。然后在onPostExecute()隐藏它,那就是全部。

我试图实现它,但我有ScrapView错误,没有更多信息,如何做到。

所以,我的问题是,你会如何推荐我这样做? 我不想要任何进度对话框。

修改

这是我的代码片段,显示了我到目前为止所做的事情:

TestActivity.java

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mylist_layout);
            wordList = (ListView) findViewById(R.id.wordsList);

            //...
    }

        private class AsyncDBDownload extends AsyncTask<String, Integer, String> {
                LinearLayout linlaHeaderProgress = (LinearLayout) findViewById(R.id.linlaHeaderProgress);

                @Override
                protected String doInBackground(String... params) {
                    try {
                        refreshList();//upload of contetn and set of adapter
                    } catch (Exception ex) {
                        Log.e(TAG, ex.toString());
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(String result) {
                    linlaHeaderProgress.setVisibility(View.GONE);
                    wordList.setVisibility(View.VISIBLE);
                }

                @Override
                protected void onPreExecute() {
                    linlaHeaderProgress.setVisibility(View.VISIBLE);
                }
            }

    private void refreshList() {
            //List content download into Cursor - adapterCursor 
            //...

            wordList.setAdapter(adapterCursor);
        }

word_list.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" >

    <LinearLayout
        android:id="@+id/linlaHeaderProgress"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:orientation="vertical"
        android:visibility="gone" >

        <ProgressBar
            android:id="@+id/pbHeaderProgress"
            style="@android:style/Widget.ProgressBar.Small"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </ProgressBar>
    </LinearLayout>

    <ListView
        android:id="@+id/wordsList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fastScrollEnabled="true" >
    </ListView>

另外两件事:

  • onResume()中,要求执行AsyncTask;
  • mylist_layout.xml中应该列出的地方包括哪个包含在此布局中word_list.xml布局

其他事项:

  • 我不想使用进度对话框,因为它不符合我的需要,我觉得它看起来不适合我的目的。我想替换列表,而不是更多广告。
  • ListFragment似乎相当不错,但我认为可能还有其他更好或更简单的解决方案来实现我的目标。

我正在做Android 2.2 / 2.3兼容的应用程序,我忘了提及,所以如果有些东西不在android.support.v4.app.Fragment内,我将不会使用它。

1 个答案:

答案 0 :(得分:7)

您可以使用ListFragment。使用setListShown()true / false隐藏/显示加载程序而不是列表。