巨大なコードダンプで申し訳ありませんが、本当に失われました。
MyActivity.Java onCreate:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_singlepane_empty);
mFragment = new PlacesFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.root_container, mFragment)
.commit();
PlacesFragment.Java onCreateView:
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
return mRootView;
注:mRootViewはViewGroupグローバルであり、問題ありません。 PlacesFragmentはListFragmentです。
レイアウト:
activity_singlepane_empty.xml:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/root_container"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#00f">
<include layout="@layout/actionbar"/>
<!-- FRAGMENTS COME HERE! See match_parent above -->
</LinearLayout>
list_content.xml:
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/listContainer"
Android:background="#990"
>
<ListView Android:id="@Android:id/list"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:drawSelectorOnTop="false" />
<TextView Android:id="@id/Android:empty"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:gravity="center"
Android:textAppearance="?android:attr/textAppearanceMedium"
Android:text="@string/no_data_suggest_connection"/>
</FrameLayout>
問題:ご覧のように、期待される動作は、上記の空のTextViewを画面の中央に表示することです。 Eclipseのデザインプレビューでは問題ありません。フラグメントとしてroot_viewに追加された場合のみ、FrameLayoutは画面全体に表示されません。
root_containerは青で、FrameLayoutは黄色がかっています。デバッグの目的については以下を参照してください。 黄色いペインが画面全体に表示されるべきではありませんか?!?!?!?
私は同じ問題を抱えていたので、ここで行ったように、フラグメントのonCreateViewのレイアウトをnullで膨らませると起こると思います。
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
代わりに、これを行う必要があります。
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content,container, false);
コンテナはビューグループです。少なくとも、それは私のために問題を解決しました。
<Android.support.v4.widget.NestedScrollView
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Android:fillViewport="true"
>
<include layout="@layout/screen_main_fragment" />
</Android.support.v4.widget.NestedScrollView>
動作させるには、layout_height = "wrap_content"を "match_parent"に変更する必要がありました。
何らかの理由で、FrameLayoutはそのレイアウトをXMLから取得しません。
コードでも設定する必要があります(フラグメントのonCreateView):
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
FrameLayout fl = (FrameLayout) mRootView.findViewById(R.id.listContainer);
fl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
return mRootView;
私がやった方法は、xmlコードで透明な画像を作成し、フラグメントを相対レイアウトにしてmakelayout_alignParentBottom="true"
のImageView
で、この方法で画像が下にくっついて、フラグメントが親を埋めます
ここにコード:
temp_transparent.xml
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:thickness="0dp"
Android:shape="rectangle">
<gradient
Android:startColor="#00000000"
Android:endColor="#00000000"
Android:type="linear"
Android:angle="270"/>
fragment_my_invites.xml
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:id="@+id/my_invites_fragment"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="#ffffff">
<ListView
Android:id="@+id/list_invites"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:divider="@color/list_divider"
Android:dividerHeight="1dp"
Android:layout_alignParentTop="true" >
</ListView>
<ImageView
Android:id="@+id/transparent_image"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_alignParentBottom="true"
Android:layout_below="@id/list_invites"
Android:src="@drawable/temp_transparent" />