2012-02-13 202 views
8

时隐藏“正在加载...”指示我一直在使用Fragments,这两者被填充了互联网拉到数据生成的显示。而代码本身按预期方式工作没有任何问题,一个片段中的一个(如ListFragment实现)显示片段,其歪斜到一边内的超静定进度指示器。我希望删除指标,并使用不同的ProgressDialog作为指标。实施ListFragment

做一些研究,我发现功能setListShownNoAnimation()ListFragment类(记录here),但以下的尝试没有成功:

  • 调用setListShownNoAnimation()在该片段中的onActivityCreated()
  • 呼叫它在父项活动的onCreate
  • 在片段的onCreateView()中调用它(导致IllegalStateException

如何删除片段的进度指示器?

+1

使用setListShown(真)tryed? – Warpzit 2012-02-13 09:06:44

+0

@Warpzit:从什么Android的API表示,'setListShown(真)'会显示ListView控件(这可能会或可能不会被初始化并设置)。此外,它似乎并没有禁用加载指示符,'setListShownNoAnimation()'似乎做。 – fayerth 2012-02-13 09:37:04

+0

只是一个猜测:)抱歉,我不能帮 – Warpzit 2012-02-13 09:47:45

回答

24

做到这一点,正确的方法是调用:

setListShown(true); 

,当你需要的进度被隐藏和显示的ListView。当您完成在后台获取数据并准备好显示列表时调用它。

+0

似乎是一个正确的方式,因为如果你通过方法为false,它显然应该向用户显示一个很好的加载进度指示器。问题是,当我在我的ListFragment中使用此方法时,我得到IllegalStateException,不能与自定义内容视图一起使用。是什么赋予了? – topwik 2012-08-10 15:50:18

+0

你是对的。这通常应该是称呼它的正确方式。尽管我的项目做得有点不同,但需要采取不同的方法。我标记你的答案仍然是公认的答案。 :) – fayerth 2013-01-07 03:58:02

+2

这应该在onActivityCreated中调用。 – nima 2014-12-05 18:53:57

1

此替代方法可能不是解决这个问题的最佳方法,但它工作得很好:

我所做的第一次使片段根本不显示,当我在layout.xml文件中声明它:

<fragment class="com.example.MyListFragment" 
    android:id="@+id/frag_list" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:visibility="gone" /> 

然后数据已被下载和处理之后,我会再使用FragmentTransaction显示片段:

FragmentManager fm = getFragmentManager(); 
Fragment frag = fm.findFragmentById(R.id.frag_list); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.show(frag); 
ft.commit(); 

如果有资源更好的方法这个问题,我很乐意提供建议。

+0

那么如果能见度消失了,你应该programaticly将其更改为可见,'setVisivility(View.VISIBLE);' – Ivor 2016-01-29 17:30:58

1
@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
    adapter.swapCursor(cursor); 
    if(isResumed()) { 
     setListShown(true); 
    } else { 
     setListShownNoAnimation(true); 
    } 
} 

但你要setListShown(false)你设置ListAdapter。这工作正常。