0

对于大屏幕,我有两个片段,它们应该是顶部/底部或左/右。问题是一个片段占用(几乎)所有空间都被一个片段占用。对于我的活动,我有两个 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,第二次是。无论如何,在这两种情况下,我都应该看到我的列表,要么是从头开始构建,要么是保存的列表。为什么不是,为什么该方法被调用两次?

4

1 回答 1

1

不完全确定这是否会导致您的问题(我怀疑确实如此),但 usingFragmentTransaction.add(..)不会将其添加Fragment到容器中,它实际上是用该 Fragment 替换了容器。这里的问题是您将两个 Fragment 添加到同一个容器中,因此它们将占用相同的空间并导致问题。

更好的方法是将两个容器视图添加到您的frag_contLinearLayout(例如FrameLayouts)中,并给它们两个单独的 id(例如frag_onefrag_two)。然后在您的 onCreate(..) 中,将其更改为:

FragmentTransaction tof = getFragmentManager().beginTransaction();
tof.add(R.id.frag_one, of);
DetailFragmentInitial df = new DetailFragmentInitial();
tof.add(R.id.frag_two, df);
tof.commit();

这将使得具有 id 的布局frag_one由 OverviewFragment 填充,而具有 id 的布局frag_two由 DetailFragmentInitial 替换。然后,您可以使用 main.xml 中的视图来调整您认为合适的片段大小。

于 2012-08-02T14:25:47.703 回答