如果无法加载ListView的内容,如何解除Android的进度条?

时间:2014-12-18 16:19:17

标签: android android-listview android-arrayadapter android-listfragment roboguice

我有一个扩展RoboListFragment的类,它使用一个管理器类来获取一些类的信息(我模型中的一个Guest)。我遇到的问题是当这个管理器无法检索数据时,我想忽略显示的进度条。 以下是我片段中最重要的部分:

public class GuestFragment extends RoboListFragment {

    // Lines omitted

    private void loadGuest() {
        Log.d(GuestFragment.class.getSimpleName(), "Loading guest...");
        this.guestManager.getGuest(new Callback<Guest>() {
            @Override
            public void onSuccess(Guest guest) {
                Log.d(GuestFragment.class.getSimpleName(), "Guest loaded OK");
                GuestFragment.this.createAdapter(guest);
            }

            @Override
            public void onFailure(UmError ex) {
                // Here I want to dismiss the ProgressBar
                Log.d(GuestFragment.class.getSimpleName(), "Guest failed");
                GuestFragment.this.getListView().setEmptyView(new View(getActivity()));     // This line wouldn't work
                Toast.makeText(GuestFragment.this.getActivity(), "Error here!", Toast.LENGTH_LONG);
            }
        });
    }

    private void createAdapter(Guest guest) {
        // Lines omitted
        if (guestExists && activityWasCreated) {
            ArrayAdapter adapter = new ProfilesAdapter(this.getActivity(), guest.getDeliveryProfiles());
            this.setListAdapter(adapter);
        }

    }
}

编辑#1:我尝试在onFailure()方法

中添加此行
GuestFragment.this.getListView().setAdapter(null)

但没有奏效。 编辑#2:我也尝试在我的onFailure()方法中添加它

GuestFragment.this.getListView().setEmptyView(null);

也不起作用。

XML非常简单:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/pLarge"
android:orientation="vertical"
tools:context=".fragment.GuestFragment">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@id/android:list"
        android:divider="@android:color/transparent"
        android:dividerHeight="@dimen/fSmaller"/>
</LinearLayout>

如您所见,我根本没有定义任何ProgressBar。我被告知Android会显示这个ProgressBar,直到设置了适配器(我没有进一步的细节),但我不知道如何为ListView设置一些空内容

我怎样才能实现这一点,以便当Callback成功返回时ProgressBar会隐藏? 最好的问候。

1 个答案:

答案 0 :(得分:0)

我犯了一个愚蠢的错误:(

而不是将null设置为列表适配器,就像这样(正确的方式):

GuestFragment.this.setListAdapter(null)

我试图获取ListView并设置null适配器,如下所示:

GuestFragment.this.getListView().setAdapter(null)

感谢您的评论!