3

私は以下の問題があります。私の電話を縦長から横長に変更すると消えたい画像があります。私が現在の活動をしているときに、それは完璧にうまく動作し、オリエンテーションを動かす。私は別のアクティビティに行って戻ってきても、まったく問題なく動作します。しかし、問題は、メインページに戻ると、onConfigurationChanged()は最初に向きを変えるときに呼び出されないということです。返されたときに画像が正しく表示されないか表示されますが、返された後に最初に向きを変更すると、onConfigurationChanged()は呼び出されず、画像は2回目の向き変更まで保持されます。皆さんのご協力をお待ちしております。 ここに私のコードのいくつかの部分があります。マニフェストにconfigChange- orientationパーミッションを置いておくと、問題はありません。onConfigurationChangedは、別のアクティビティから初めて返されたときに呼び出されません。

@Override 
    public void onConfigurationChanged(Configuration newConfig) {L.p("configList",5200184); 
     super.onConfigurationChanged(newConfig); 

     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE&&isVertical==true) { 

      Logo.setVisibility(ImageView.GONE); 
      mainLogo.setVisibility(ImageView.GONE); 
      isHorizontal=true; 

     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT&&isHorizontal==true){ 

      Logo.setVisibility(ImageView.VISIBLE); 
      mainLogo.setVisibility(ImageView.VISIBLE); 
      isVertical=true; 
     } 
     } 




    @Override 
    protected void onResume() {L.p("onResumeList", 5200113); 
     super.onResume(); 
     Context ctx = getApplicationContext(); 
    WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 

     if((display.getOrientation() == Surface.ROTATION_90) || (display.getOrientation() == Surface.ROTATION_270)) 
      {//Horizontal 
      L.p("you are resuming horizontal",5200124); 
      Logo.setVisibility(ImageView.INVISIBLE); 
    mainLogo.setVisibility(ImageView.INVISIBLE);  
    isHorizontal=true; 
    //isVertical=false; 
      } 
     else {//Vertical 
      L.p("you are resuming vertical",5200131); 
    Logo.setVisibility(ImageView.VISIBLE); 
    mainLogo.setVisibility(ImageView.VISIBLE); 
    isVertical=true; 
    // isHorizontal=false; 
    } 
     tracker.trackPageView("/deviceList"); 
    } 

ありがとうございます!

+0

私は同じ問題があります。あなたはそれを修正することができましたか? –

答えて

0

オリエンテーションの変更を無効にする必要はありません。 layout-landフォルダ内に、画像が含まれていない(または画像が非表示になっているか消えている)新しいレイアウトファイルを宣言するだけです。向きを変更すると、アクティビティはそのレイアウトをonCreateにロードします。

+0

私はそれが悪い習慣を聞いたことがありますが、チップのおかげで。私はちょうどonConfigurationChanged()が別のアクティビティから返った後に向きを変えたときに初めて呼び出されない理由を知りたいだけです。私が水平から垂直に移動すると、画像はまだ消えています。しかし、次に私は水平に戻って垂直に移動し、それが想定されているように表示されます。 –

+1

私は個人的にレイアウト - *フォルダが「悪い習慣」であると聞いたことがありません。なぜそれがそのように見なされるのかについて何か? – josephus

+0

@tdevoy configChangeを使ってハッキングに対して別々のレイアウトを作る方がずっと良い方法です。 –

0

なぜisHorizo​​ntalとisVerticalをチェックしますか? これらのうちの1つが偽であり、条件付きで失敗する可能性がありますか?

+1

これらは間違いなく正しく動作します。私は、以前の方向を正しく知っているonResumeの後で二重チェックするために特別なガードとしてそれらを入れます。すべてがうまくいきます。それは、初めて私がアクティビティに戻り、電話の向きを変更したとき、向きの変更は認識されず、onConfigurationChangedが呼び出される前に向きを2度変更する必要があります。しかし、他のアイデアをありがとう? –

0

あなたはAndroidManifest.xml<activity>の下でそれぞれの属性を宣言しない限り、メソッドが呼び出されません。

android:configChanges="orientation" 
+0

それは問題ではありません。問題は、別のアクティビティから戻るときに、onConfigurationChanged()が最初にオリエンテーションを変更したときに呼び出されることはありませんが、それ以降はいつでも呼び出されるということです。あなたはそれについて何か考えていますか? –

+0

理由は不明ですが、アクティビティの向きを手動で設定しましたか?その場合、メソッドも正しく呼び出されません。私は新しいAndroidプロジェクトを作成し、onConfigurationChanged()とstartActivity()の代わりにコードを入れないようにして、その動作を観察できるようにすることをお勧めします。 –

+0

決してできる限り、configChangeを使用しないでください。 https://plus.google.com/109306462100800920982/posts/LuYGURGdX7Q Adamの素晴らしいコメントを確認してください。私はAndroidデベロッパーがこれをやめるまで休まない。 @VictorWong –

0

どこかに問題を引き起こしフラグは、おそらくあります。残念ながら、完全なコードを見ることなく問題が何かを知ることはできません。

ただし、configChangeハックを使用しないでください。非常にまれなケースの説明はhttps://plus.google.com/109306462100800920982/posts/LuYGURGdX7Qです。

ほとんどの場合、onConfigurationChangedメソッドはここではすべてオーバーライドする必要はありません。構成の変更時にアクティビティが再作成されたときに、別のレイアウトを作成します。

関連する問題