2016-07-12 10 views
0

私はAdapterクラスとMainActivityを持っています。 Adapterクラスには、子どもの名前のリストが表示され、名前の横には、学校に到着したtimeが表示されます。問題は、私が景色に回転すると、timeの値が失われます。android:configChanges = "orientation | screenSize"は私のレイアウトの外観を変更します

私は何が起こるのは時間の値はランドスケープモードで失われたが、レイアウトの外観は、ポートレートモードと同じ表示されていないことであるMainActivity

android:configChanges="orientation|keyboardHidden|screenSize" 

の下で私のマニフェストに追加することを検討しました。実際、風景レイアウトはポートレートレイアウトとは少し違って見えます。

time値を取得し、ランドスケープレイアウトの外観を維持するには、この場合どうすればよいですか。

答えて

1

2つのオプションがあります:

  1. あなたの活動や断片で使用onSaveInstanceState(Bundle outState)方法 - あなたのデータを保存し、回転後にそれらを復元する(onCreate(Bundle savedInstanceState)またはonRestoreInstanceState(Bundle savedInstanceState)中)

例:

は、
@Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putSerializable("time_data", (Seriazable) mTimeList); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ... 

     if (savedInstanceState != null) { 
      // restore value of members from saved state 
      mTimeList = savedInstanceState.getSerializable("time_data"); 
     } 

     ... 
    } 
  1. を使用してください:あなたと同じようにconfigChangesを変更する回転後の自分で変更を扱うが、景観のレイアウトを膨らませるDY使用

例:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 

私は最初のオプションを好むし、また、これはAndroid guideに提案しました。

+0

ありがとう:)私はあなたの第二の溶液を使用している場合、()の場合であれば下に、私は、アダプタクラスのレイアウトランドXMLを設定する必要があります。どうすればいいのですか – Mark023

+0

設定変更後のレイアウトインフレーションに関するこのStackOverflow [answer](http://stackoverflow.com/a/17050108/1423876)をチェックすることができます。 StackOverflowにはレイアウトインフレーションに関するいくつかの質問がありますので、それらを確認して目的に合わせて適切なものを使用することができます。 – comrade

0

あなたは単に画面の向きを縦方向に設定して回転させることができます。 (あなたがしたい場合)は、この方法のように :onConfigurationChangedで

<activity android:name=".MainActivity" 
      android:screenOrientation="portrait"> 
    </activity> 
関連する問題