0

我有一个使用2个不同的布局一个FragmentActivity取决于屏幕尺寸:片段Viewpager不同的屏幕尺寸

  1. XLARGE景观。布局有3个LinearLayouts,每个包含1个片段。

  2. 剩余的屏幕尺寸。该布局有1 ViewPager其中包含所有片段。

当屏幕方向在10英寸屏幕变化时,应用程序崩溃。它在横向模式下使用屏幕尺寸1,在纵向模式下使用尺寸2。

的代码:

public class RegistroAccionesPartidoActivity extends FragmentActivity { 


private static ArrayAdapter<Fragment> mFragmentArray; 
private ViewPager mMyPager; 
private Fragment1 mFragment1; 

private Fragment2 mFragment2; 
private Fragment3 mFragment3; 
private MyFragmentAdapter mFragmentsAdapter; 
private FragmentManager mFragmentManager; 
private FragmentTransaction mFragmentTrasaction; 


@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    setContentView(R.layout.my_layout); 


    LinearLayout layoutFragment1 = (LinearLayout)findViewById(R.id.fragment1); 


    if(layoutFragment1 == null) { 

     mFragmentManager = getSupportFragmentManager(); 

     mMyPager = (ViewPager) findViewById(R.id.my_pager); 
     mFragmentArray = new ArrayAdapter<Fragment>(getApplicationContext(),android.R.layout.simple_list_item_1); 
     mFragmentsAdapter = new Fragment2Adapter(mFragmentManager); 


     if(savedState == null) { 

      mFragment2 = new Fragment2(true); 
      mFragment3 = new Fragment3(); 
      mFragment1 = new Fragment1(mIdPartido, mIdEquipoLocal, mIdEquipoVisitante); 
     } else { 

      mFragment1 = (Fragment1) getSupportFragmentManager().getFragment(savedState, "fragment1"); 
      mFragment2 = (Fragment2) getSupportFragmentManager(). 
      getFragment(savedState,"fragment2"); 
      mFragment3 = (Fragment3) getSupportFragmentManager(). 
      getFragment(savedState, "fragment3"); 
     } 


     mFragmentArray.add(mFragment1); 
     mFragmentArray.add(mFragment2); 
     mFragmentArray.add(mFragment3); 

     mDatosPartidoPager.setAdapter(mFragmentsAdapter); 

     mDatosPartidoPager.setCurrentItem(1); 


     } else { // xLarge Version 

     mFragmentManager = getSupportFragmentManager(); 
     mFragmentTrasaction = mFragmentManager.beginTransaction(); 


     if(savedState == null) { 
      mFragment1 = new Fragment1(); 
      mFragment2 = new Fragment2(); 
      mFragment3 = new Fragment3(); 


     } else { 
      mFragment1 = (Fragment1) getSupportFragmentManager(). 
       getFragment(savedState, "fragment1"); 

      mFragment2 = (Fragment2) getSupportFragmentManager(). 
       getFragment(savedState,"fragment2"); 
      mFragment3 = (Fragment3) getSupportFragmentManager(). 
       getFragment(savedState, "fragment3"); 
    } 
    mFragmentTrasaction.add(R.id.fragment1, mFragment1); 
    mFragmentTrasaction.add(R.id.fragment2, mFragment2); 
    mFragmentTrasaction.add(R.id.fragment3, mFragment3); 
    mFragmentTrasaction.commit(); 
    } 

} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    getSupportFragmentManager().putFragment(outState, "fragment2" , 
     mFragment2); 
    getSupportFragmentManager().putFragment(outState, "fragment3", 
     mFragment3); 

    getSupportFragmentManager().putFragment(outState,"fragment1", 
     mFragment1); 

    } 
} 

XLARGE布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1"> 

</LinearLayout> 


<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1"> 

</LinearLayout> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment3" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1"> 

</LinearLayout> 


</LinearLayout> 

其余屏幕尺寸布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <android.support.v4.view.ViewPager 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/my_pager"> 

    </android.support.v4.view.ViewPager> 

</LinearLayout> 

我具有根据屏幕改变的顺序2不同势崩溃:

  1. 开始景观,该错误信息是:

java.lang.IllegalArgumentException异常:未找到ID为0x观点......对于Fragment2

  1. 当我开始纵向时,错误消息是:

java.lang.IllegalStateException:片段已经补充说:片段1

很抱歉的大问题。我只是试图解释我的问题。

非常感谢。

编辑:在大设备(​​如10“)横向模式使用xLarge布局和肖像模式使用其他布局。

回答

0

对我来说(在XLarge Layout中),嵌套的LinearLayout-Elements混合水平和垂直方向看起来很奇怪。如果你以这种方式嵌套,请仔细观察。

Greetings, Wolfgang

+0

感谢您的回答。当我改编我的代码以获得更好的解释时,我犯了一个错误。它不在原始代码中。 – gutiory 2012-02-09 08:53:04