无法加载 ListView 的内容时如何关闭 Android 的进度条?

Posted

技术标签:

【中文标题】无法加载 ListView 的内容时如何关闭 Android 的进度条?【英文标题】:How to dismiss Android's progress bar when failed to load a ListView's contents? 【发布时间】:2015-02-17 12:12:41 【问题描述】:

我有一个扩展 RoboListFragment 的类,它使用管理器类来获取一些类的信息(我的模型中的访客)。我面临的问题是当这个管理器无法检索数据时,我想关闭显示的进度条。 以下是我的 Fragment 中最重要的部分:

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_
android:layout_
android:padding="@dimen/pLarge"
android:orientation="vertical"
tools:context=".fragment.GuestFragment">

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

如您所见,我根本没有定义任何 ProgressBar。有人告诉我,在设置适配器之前,Android 会显示此 ProgressBar(我没有更多详细信息),但我不知道如何为 ListView 设置一些空内容

我怎样才能做到这一点,以便在回调成功返回时隐藏 ProgressBar? 最好的问候。

【问题讨论】:

进度条在哪里设置? onFailure 尝试创建一个空的适配器 @Mou 我没有设置进度条。 @Rohit5k2 我尝试在onFailure() 中设置GuestFragment.this.getListView().setAdapter(null) 但也不起作用 你能试试这个GuestFragment.this.createAdapter(new Guest());或 GuestFragment.this.createAdapter(null); 【参考方案1】:

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

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

GuestFragment.this.setListAdapter(null)

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

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

感谢您的 cmets!

【讨论】:

以上是关于无法加载 ListView 的内容时如何关闭 Android 的进度条?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 PHP 为 URL 设置一些内容? [关闭]

在我的 CustomListAdapter 上实现 Filterable 接口后无法重新加载 ListView 内容

在listview中向下滚动时如何加载更多项?

Android:Endless Scrolling listview 内容错误和 NullpointerException

jquery mobile listview使用ajax动态加载后,跳转到其他页面返回时数据没有保存如何解决?

Nativescript Vue:滚动ListView时如何关闭searchBar键盘?