2

我想在我的应用程序中添加ListView,里面LinearLayout什么时候加载而不是列表有进度条。这类似于系统应用程序,您可以在其中管理您的应用程序。

我找到了一些关于它的信息,但没有一个是好的。一个似乎最好的说法是创建两个布局(一个带有进度条,另一个带有 ListView),然后在onPreExecute()(我正在使用AsyncTask它)显示进度条。然后onPostExecute()隐藏它,仅此而已。

我试图实现它,但我有 ScrapView 错误,并且没有更多信息,它是如何完成的。

所以,我的问题是,你会建议我怎么做?我不想要任何进度对话框。

编辑:

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

测试活动.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,我就不会使用它。

4

1 回答 1

7

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

于 2013-03-04T12:29:50.597 回答