2012-02-13 407 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。這工作正常。