0

我膨脹在FragmentonCreateView()的佈局,在所創建的活動(,我retreving從DataBase的數據,並在佈局更新值從我早先膨脹的DataBase如何更新onActivityCreated())的<code>Fragment</code>的佈局片段

LinearLayout main = null; 
     if (rootView instanceof LinearLayout) 
      main = (LinearLayout) rootView; 
     main.removeAllViews(); 
     LayoutInflater inflater = LayoutInflater.from(getActivity() 
       .getApplicationContext()); 
     View inflatedLayout = inflater 
       .inflate(R.layout.nodata, null, false); 
     if (main != null) 
      main.addView(inflatedLayout); 

問題其中我面臨是如果我沒有得到數據,我試圖通過去除rootView的所有元件以膨脹無數據XML(否DataView),該片段的onActivityCreated(),NoDataXML是越來越膨脹,但UI對齊沒有發生,佈局不佔用整個屏幕寬度,它看起來它wrapcontent,我給matchparent寬度和高度的nodataxml佈局

任何人都知道處理這個問題的標準方式。

+0

可以請你發佈你的fragment layout.xml和no_data.xml嗎? – blueware

回答

0

是的,我是不是XML佈局能夠得到它的中心,通過編程方式做出來。

0

處理這種情況的通常方法是在你的根目錄中有兩個子佈局片段視圖:第一個用於加載數據,第二個 - 沒有數據佈局。通常沒有數據佈局是小視圖,所以系統沒有任何開銷。並在onActivityCreated()內玩視圖可見性。

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <LinearLayout 
     android:id="@id/loaded_data" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

    <LinearLayout 
     android:id="@id/no_data" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

</FrameLayout> 

裏面你onActivityCreated做這樣的事情:

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    View noDataView = getView().findViewById(R.id.no_data); 
    View loadedData = getView().findViewById(R.id.loaded_data); 
    noDataView.setVisibility(isDataLoaded ? View.GONE : View.VISIBLE); 
    loadedData.setVisibility(isDataLoaded ? View.VISIBLE : View.GONE); 
    // display your data 
}