对于大屏幕,我有两个片段,它们应该是顶部/底部或左/右。问题是一个片段占用(几乎)所有空间都被一个片段占用。对于我的活动,我有两个 main.xml(一个用于纵向,一个用于横向)。但它们基本上是相似的(除了方向)。
主要的.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" android:id="@+id/frag_cont" >
</LinearLayout>
在 onCreate 中,我将片段添加到该布局中:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
OverviewFragment of = new OverviewFragment();
FragmentTransaction tof = getFragmentManager().beginTransaction();
tof.add(R.id.frag_cont, of);
DetailFragmentInitial df = new DetailFragmentInitial();
tof.add(R.id.frag_cont, df);
tof.commit();
}
这两个片段在 onCreateView() 方面看起来有点相似
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.overview, container, false);
}
最后,这些片段的两个 xml 文件如下所示,首先是较小的片段:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="1">
<ImageView
android:id="@+id/imageLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/textB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"
android:layout_above="@id/imageLogo"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
现在贪婪的占据了空间:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="10000" >
<ListView
android:id="@+id/ListView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
我假设当我将两个 layout_weight 都设置为 1 时,两者都将占用相同数量的空间,但即使设置为 1000:1,较大的一个也会占用大约 2/3 的空间。离开重量将使更大的片段出现在整个屏幕上,而另一个则根本不可见。有任何想法吗?
编辑:
我遵循下面给出的方法。现在在空间方面好多了。在屏幕上旋转概览片段(基本上是列表视图)为空,其他片段仍然可以。
在 OverviewFragment.java 中,我在 onActivityCreated() 中重新填充片段:
public void onSaveInstanceState(Bundle bundle)
{
bundle.putSerializable("list", mList);
super.onSaveInstanceState(bundle);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
if(savedInstanceState != null)
{
mList = (ArrayList<myObject>) savedInstanceState.getSerializable("list");
}
else
{
mAppList = new ArrayList<myObject>();
new getApps().execute();
}
ListView lv = (ListView) getActivity().findViewById(R.id.ListView01);
lv.setOnItemClickListener(new TableItemSelected());
mItemAdapter = new ItemAdapterOverview(getActivity().getApplicationContext(), mList);
lv.setAdapter(mItemAdapter);
}
旋转屏幕时,首先调用 onSaveInstanceState(),然后调用 onActivityCreated()两次。第一次调用saveInstanceState 不是null,第二次是。无论如何,在这两种情况下,我都应该看到我的列表,要么是从头开始构建,要么是保存的列表。为什么不是,为什么该方法被调用两次?