如何在Fragment的onActivityCreated()中更新布局

时间:2015-06-11 14:43:20

标签: android android-layout android-fragments android-activity

我正在onCreateView()的{​​{1}}中展开布局,在Fragment的活动创建()上,我正在审核Fragment中的数据并更新布局中的值来自我之前膨胀的DataBase

DataBase

我面临的问题是,如果我没有数据,我试图通过删除rootView的所有元素来扩充片段的nodata XML(No 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); ),DataView,NoDataXML是膨胀,但UI对齐没有发生,布局没有占据屏幕的整个宽度,它看起来onActivityCreated(),我给wrapcontent宽度和高度的nodataxml布局

任何人都知道解决这个问题的标准方法。

2 个答案:

答案 0 :(得分:0)

处理这种情况的常用方法是在根片段视图中只有2个子布局:首先是加载数据,第二个是没有数据布局。通常没有数据布局是微小的视图,因此系统没有任何开销。并在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
}

答案 1 :(得分:0)

是的,我可以通过编程方式将其设置为中心,而不是xml布局。