etc./StackOverFlow

Android 회전 시 활동 다시 시작

청렴결백한 만능 재주꾼 2022. 3. 7. 11:53
반응형

질문자 :Isaac Waller


내 Android 애플리케이션에서 기기를 회전하면(키보드를 밀어내면) 내 Activity 이 다시 시작됩니다( onCreate 가 호출됨). 이제 이것이 아마도 원래의 방식일 것입니다. 그러나 저는 onCreate 메소드에서 많은 초기 설정을 수행하므로 다음 중 하나가 필요합니다.

  1. 모든 초기 설정을 다른 기능에 두어 장치 회전 또는
  2. onCreate 가 다시 호출되지 않고 레이아웃이 조정되거나
  3. onCreate 가 호출되지 않도록 앱을 세로 모드로만 제한합니다.


애플리케이션 클래스 사용

초기화에서 수행하는 작업에 따라 Application 을 확장하는 새 클래스를 만들고 초기화 코드를 해당 클래스 내에서 onCreate

 public class MyApplicationClass extends Application { @Override public void onCreate() { super.onCreate(); // TODO Put your application initialization code here. } }

애플리케이션 클래스의 onCreate 는 전체 애플리케이션이 생성될 때만 호출되므로 방향 또는 키보드 가시성 변경 시 활동이 다시 시작되어도 이를 트리거하지 않습니다.

이 클래스의 인스턴스를 싱글톤으로 노출하고 getter 및 setter를 사용하여 초기화하는 애플리케이션 변수를 노출하는 것이 좋습니다.

참고: 등록 및 사용하려면 매니페스트에 새 애플리케이션 클래스의 이름을 지정해야 합니다.

 <application android:name="com.you.yourapp.MyApplicationClass"

구성 변경에 대응하기 [업데이트: API 13부터 더 이상 사용되지 않습니다. 권장 대안 참조 ]

또 다른 대안으로 애플리케이션이 방향 및 키보드 가시성 변경과 같은 재시작을 유발하는 이벤트를 수신 대기하고 활동 내에서 처리하도록 할 수 있습니다.

활동의 매니페스트 노드에 android:configChanges 노드를 추가하여 시작합니다.

 <activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">

또는 Android 3.2(API 레벨 13) 이상 :

 <activity android:name=".MyActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/app_name">

그런 다음 활동 내에서 onConfigurationChanged 메서드를 setContentView 를 호출하여 GUI 레이아웃이 새 방향으로 다시 수행되도록 합니다.

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setContentView(R.layout.myLayout); }

Reto Meier

Android 3.2 이상 업데이트:

주의 : Android 3.2(API 레벨 13)부터 기기가 세로 방향과 가로 방향 간에 전환될 때 "화면 크기"도 변경됩니다. 당신이합니다 (의 minSdkVersion 선언과 targetSdkVersion을 속성으로) API 레벨 13 이상에 대한 개발이 다한 방향 변경에 런타임 다시 시작을 방지하려는 경우 따라서, 당신은 포함해야 "screenSize" 받는 사람뿐만 아니라 값 "orientation" 값입니다. android:configChanges="orientation|screenSize" 선언해야 합니다. 그러나 애플리케이션이 API 레벨 12 이하를 대상으로 하는 경우 활동은 항상 이 구성 변경 자체를 처리합니다(이 구성 변경은 Android 3.2 이상 기기에서 실행되는 경우에도 활동을 다시 시작하지 않음).


Gorm

onCreate() 가 완전히 실행되지 않도록 하는 대신 Bundle savedInstanceState 확인하여 null인지 여부를 확인합니다.

Activity 가 실제로 생성될 때 실행되어야 savedInstanceState 가 null인 경우에만 onCreate() 에서 해당 로직을 실행합니다.

그렇지 않으면 레이아웃이 방향에 맞게 다시 그리기를 원합니다.

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_game_list); if(savedInstanceState == null){ setupCloudMessaging(); } }

이것이 궁극적 인 대답인지 확실하지 않지만 저에게 효과적입니다.


nebulae

제가 한...

매니페스트에서 활동 섹션에 다음을 추가했습니다.

 android:configChanges="keyboardHidden|orientation"

활동에 대한 코드에서 다음을 구현했습니다.

 //used in onCreate() and onConfigurationChanged() to set up the UI elements public void InitializeUI() { //get views from ID's this.textViewHeaderMainMessage = (TextView) this.findViewById(R.id.TextViewHeaderMainMessage); //etc... hook up click listeners, whatever you need from the Views } //Called when the activity is first created. @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); InitializeUI(); } //this is called when the screen rotates. // (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges) @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setContentView(R.layout.main); InitializeUI(); }

Someone Somewhere

당신이 설명하는 것은 기본 동작입니다. 다음을 추가하여 이러한 이벤트를 직접 감지하고 처리해야 합니다.

 android:configChanges

매니페스트에 추가한 다음 처리하려는 변경 사항을 처리합니다. 따라서 방향을 위해 다음을 사용합니다.

 android:configChanges="orientation"

키보드를 열거나 닫으려면 다음을 사용합니다.

 android:configChanges="keyboardHidden"

둘 다 처리하려면 다음과 같이 파이프 명령으로 분리하면 됩니다.

 android:configChanges="keyboardHidden|orientation"

이렇게 하면 호출하는 모든 활동에서 onConfigurationChanged 메서드가 트리거됩니다. 메서드를 재정의하면 새 값을 전달할 수 있습니다.

도움이 되었기를 바랍니다.


GregD

방금 이 지식을 발견했습니다.

방향 변경을 통해 활동을 유지하고 onConfigurationChanged 통해 처리하기 위해 위 의 문서 및 코드 샘플은 매니페스트 파일에서 다음을 제안합니다.

 <activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" android:label="@string/app_name">

항상 작동한다는 추가 이점이 있습니다.

추가 정보는 keyboardHidden 을 생략하면 논리적으로 보일 수 있지만 에뮬레이터에서 오류가 발생한다는 것입니다(최소한 Android 2.1의 경우). orientation 만 지정하면 에뮬레이터가 때때로 OnCreateonConfigurationChanged 호출하고 다른 경우 OnCreate

장치에서 오류가 발생하는 것을 본 적이 없지만 다른 장치에서는 에뮬레이터가 실패한다는 이야기는 들었습니다. 따라서 문서화할 가치가 있습니다.


Liudvikas Bukys

방향 변경 간에 데이터를 유지하는 Android 플랫폼의 방법인 onRetainNonConfigurationInstance()getLastNonConfigurationInstance() 사용을 고려할 수도 있습니다.

onCreate 또는 그 이후로 계산된 다른 정보에서 얻은 정보와 같은 구성 변경 사항에 걸쳐 데이터를 유지할 수 있으며 Android가 현재 방향에 대해 xml 파일을 사용 Activity 을 다시 레이아웃할 수 있습니다. 사용.

여기 또는 여기를 참조하십시오.

Fragments 전환하고 유지하려는 Fragment 에 대해 setRetainInstance(true) 를 대신 사용하도록 권장하면서 이러한 메서드는 이제 더 이상 사용되지 않습니다(위의 대부분의 솔루션에서 제안하는 것처럼 방향 변경을 직접 처리하는 것보다 여전히 유연함). .


Jon O

이 접근 방식은 유용하지만 Fragments를 사용할 때 불완전합니다.

조각은 일반적으로 구성 변경 시 다시 생성됩니다. 이런 일이 발생하지 않으려면 다음을 사용하십시오.

setRetainInstance(true); 프래그먼트의 생성자에서

이렇게 하면 구성 변경 중에 조각이 유지됩니다.

http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(부울)


Abdo

방금 추가했습니다

 android:configChanges="keyboard|keyboardHidden|orientation"

매니페스트 파일에 있고 내 활동에 onConfigurationChanged 메서드를 추가하지 않았습니다.

그래서 키보드가 미끄러지거나 아무 일도 일어나지 않을 때마다 .


bass.t

onCreate 메소드는 Android orientation 을 변경하더라도 여전히 호출됩니다. 따라서 모든 무거운 기능을 이 방법으로 옮기는 것은 도움이 되지 않습니다.


ganesh krishnan

Manifest.xml <activity> 태그 안에 아래 코드를 넣으세요.

 android:configChanges="screenLayout|screenSize|orientation"

Vaishali Sutariya

다음 단계를 수행하기만 하면 매우 간단합니다.

 <activity android:name=".Test" android:configChanges="orientation|screenSize" android:screenOrientation="landscape" > </activity>

이것은 나를 위해 작동합니다.

참고: 방향은 요구 사항에 따라 다릅니다.


ManiTeja

 onConfigurationChanged is called when the screen rotates. (onCreate is no longer called when screen rotates due to manifest, see: android:configChanges)

매니페스트의 어떤 부분이 " onCreate() 호출하지 마십시오"라고 말합니까?

또한, 구글 문서 도구는 사용하지 말 android:configChanges (최후의 수단 제외) ....하지만 그들은 모두 DO의 사용을 제안 대체 방법은 android:configChanges .

내 경험상 에뮬레이터는 회전 시 onCreate()
하지만 동일한 코드를 실행하는 1-2개의 장치는... 그렇지 않습니다. (왜 어떤 차이가 있는지 확실하지 않습니다.)


Carol

Android 매니페스트에서 변경할 사항은 다음과 같습니다.

 android:configChanges="keyboardHidden|orientation"

활동 내에서 추가할 사항은 다음과 같습니다.

 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(); } }

sumit pandey

이 줄을 매니페스트에 추가하십시오.

 android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|uiMode"

활동에 대한 이 스니펫 :-

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); }

Parin Parikh

이를 수행하는 방법에는 여러 가지가 있습니다.

활동 상태 저장

onSaveInstanceState 활동 상태를 저장할 수 있습니다.

 @Override public void onSaveInstanceState(Bundle outState) { /*Save your data to be restored here Example : outState.putLong("time_state", time); , time is a long variable*/ super.onSaveInstanceState(outState); }

그런 다음 bundle 을 사용하여 상태를 복원합니다.

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(savedInstanceState!= null){ /*When rotation occurs Example : time = savedInstanceState.getLong("time_state", 0); */ } else { //When onCreate is called for the first time } }

방향 변경을 직접 처리

또 다른 대안은 방향 변경을 직접 처리하는 것입니다. 그러나 이것은 좋은 습관으로 간주되지 않습니다.

이것을 매니페스트 파일에 추가하십시오.

 android:configChanges="keyboardHidden|orientation"

Android 3.2 이상:

 android:configChanges="keyboardHidden|orientation|screenSize" @Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { //Handle rotation from landscape to portarit mode here } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){ //Handle rotation from portrait to landscape mode here } }

회전 제한

회전을 피하기 위해 활동을 세로 또는 가로 모드로 제한할 수도 있습니다.

매니페스트 파일의 활동 태그에 다음을 추가합니다.

 android:screenOrientation="portrait"

또는 활동에서 프로그래밍 방식으로 구현합니다.

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }

Piyush

내가이 일을 발견하는 방법은 사용하는 것입니다 onRestoreInstanceStateonSaveInstanceState 에 뭔가 저장하는 이벤트를 Bundle (당신이 필요가없는 경우에도 어떤 변수가 저장된 그래서 그냥 뭔가를 거기에 넣어 Bundle 비어 있지 않습니다). 그런 다음 onCreate Bundle 이 비어 있는지 확인하고 비어 있으면 초기화를 수행하고 그렇지 않으면 초기화를 수행합니다.


Shaun

"안드로이드 방식"은 아니지만 방향 변경을 직접 처리하고 변경된 방향을 고려하기 위해 보기 내에서 위젯의 위치를 변경함으로써 매우 좋은 결과를 얻었습니다. 뷰를 저장하고 복원할 필요가 없기 때문에 다른 접근 방식보다 빠릅니다. 또한 재배치된 위젯은 방금 이동 및/또는 크기 조정된 동일한 위젯이기 때문에 사용자에게 보다 원활한 경험을 제공합니다. 이러한 방식으로 모델 상태뿐만 아니라 뷰 상태도 보존할 수 있습니다.

RelativeLayout 은 때때로 스스로 방향을 바꿔야 하는 보기에 좋은 선택이 될 수 있습니다. 각 하위 위젯에 대해 각각 다른 상대 위치 규칙을 사용하여 세로 레이아웃 매개변수 세트와 가로 레이아웃 매개변수 세트를 제공하면 됩니다. 그런 다음 onConfigurationChanged() 메서드에서 적절한 메서드를 각 자식 setLayoutParams() 자식 컨트롤 자체의 방향을 내부적으로 조정해야 하는 경우 해당 자식에 대한 메서드를 호출하여 방향 변경을 수행하면 됩니다. 그 아이는 유사 등 내부 방향 전환을해야하고, 자식 컨트롤의 메소드를 호출합니다.


Carl

화면이 회전할 때마다 열려 있는 활동이 종료되고 onCreate()가 다시 호출됩니다.

1 . 화면이 회전할 때 활동 상태를 저장하는 한 가지 작업을 수행할 수 있으므로 활동의 onCreate()가 다시 호출될 때 모든 이전 항목을 복구할 수 있습니다. 링크를 참조하십시오

2 . 활동이 다시 시작되지 않도록 하려면 manifest.xml 파일에 다음 행을 배치하기만 하면 됩니다.

 <activity android:name=".Youractivity" android:configChanges="orientation|screenSize"/>

Mansuu....

모든 값을 매개변수에 저장하려면 onSavedInstanceState 메소드를 사용해야 합니다.

 @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); outPersistentState.putBoolean("key",value); }

그리고 사용

 @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); savedInstanceState.getBoolean("key"); }

화면 회전을 처리할 개체를 보기 위해 값을 검색하고 설정합니다.


koteswara D K

참고 : 미래에 누군가가 나와 같은 문제에 직면하면이 답변을 게시합니다. 나를 위해 다음 줄은 충분하지 않았습니다.

 android:configChanges="orientation"

화면을 회전했을 때 `onConfigurationChanged(Configuration newConfig) 메소드가 호출되지 않았습니다.

솔루션: 문제가 방향과 관련이 있는 경우에도 "screenSize"를 추가해야 했습니다. 따라서 AndroidManifest.xml - 파일에 다음을 추가합니다.

 android:configChanges="keyboardHidden|orientation|screenSize"

onConfigurationChanged(Configuration newConfig) 메서드를 구현합니다.


iHank

manifest 의 활동 섹션에서 다음을 추가합니다.

 android:configChanges="keyboardHidden|orientation"

Richard K Maleho

매니페스트에 다음 줄을 추가하십시오. android:configChanges="orientation|screenSize"


Vikramsinh Gaikwad

사람들은 당신이 사용해야한다고 말합니다

 android:configChanges="keyboardHidden|orientation"

그러나 Android에서 회전을 처리하는 가장 훌륭하고 전문적인 방법은 Loader 클래스를 사용하는 것입니다. 유명한 클래스는 아니지만(이유는 모르겠지만) AsyncTask보다 훨씬 낫습니다. 자세한 내용은 Udacity의 Android 과정에 있는 Android 자습서를 참조하십시오.

물론 다른 방법으로 onSaveInstanceState로 값이나 뷰를 저장하고 onRestoreInstanceState로 읽을 수 있습니다. 정말 당신에게 달려 있습니다.


Theo

Google에서 소개한 Android 아키텍처의 최고의 구성 요소 중 하나는 ViewModel이라는 모든 요구 사항을 충족합니다.

UI 관련 데이터를 수명 주기 방식으로 저장 및 관리하도록 설계되었으며 화면 회전에 따라 데이터가 유지될 수 있습니다.

 class MyViewModel : ViewModel() {

https://developer.android.com/topic/libraries/architecture/viewmodel을 참조하십시오.


Android Geek

시행 착오 끝에 대부분의 상황에서 내 요구 사항에 맞는 솔루션을 찾았습니다. 코드는 다음과 같습니다.

매니페스트 구성:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pepperonas.myapplication"> <application android:name=".App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|screenSize"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>

주요 활동:

 import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "MainActivity"; private Fragment mFragment; private int mSelected = -1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate " + ""); // null check not realy needed - but just in case... if (savedInstanceState == null) { initUi(); // get an instance of FragmentTransaction from your Activity FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); /*IMPORTANT: Do the INITIAL(!) transaction only once! * If we call this everytime the layout changes orientation, * we will end with a messy, half-working UI. * */ mFragment = FragmentOne.newInstance(mSelected = 0); fragmentTransaction.add(R.id.frame, mFragment); fragmentTransaction.commit(); } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(TAG, "onConfigurationChanged " + (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE ? "landscape" : "portrait")); initUi(); Log.i(TAG, "onConfigurationChanged - last selected: " + mSelected); makeFragmentTransaction(mSelected); } /** * Called from {@link #onCreate} and {@link #onConfigurationChanged} */ private void initUi() { setContentView(R.layout.activity_main); Log.d(TAG, "onCreate instanceState == null / reinitializing..." + ""); Button btnFragmentOne = (Button) findViewById(R.id.btn_fragment_one); Button btnFragmentTwo = (Button) findViewById(R.id.btn_fragment_two); btnFragmentOne.setOnClickListener(this); btnFragmentTwo.setOnClickListener(this); } /** * Not invoked (just for testing)... */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.d(TAG, "onSaveInstanceState " + "YOU WON'T SEE ME!!!"); } /** * Not invoked (just for testing)... */ @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.d(TAG, "onSaveInstanceState " + "YOU WON'T SEE ME, AS WELL!!!"); } @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume " + ""); } @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause " + ""); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, "onDestroy " + ""); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_fragment_one: Log.d(TAG, "onClick btn_fragment_one " + ""); makeFragmentTransaction(0); break; case R.id.btn_fragment_two: Log.d(TAG, "onClick btn_fragment_two " + ""); makeFragmentTransaction(1); break; default: Log.d(TAG, "onClick null - wtf?!" + ""); } } /** * We replace the current Fragment with the selected one. * Note: It's called from {@link #onConfigurationChanged} as well. */ private void makeFragmentTransaction(int selection) { switch (selection) { case 0: mFragment = FragmentOne.newInstance(mSelected = 0); break; case 1: mFragment = FragmentTwo.newInstance(mSelected = 1); break; } // Create new transaction FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack transaction.replace(R.id.frame, mFragment); /*This would add the Fragment to the backstack... * But right now we comment it out.*/ // transaction.addToBackStack(null); // Commit the transaction transaction.commit(); } }

그리고 샘플 조각:

 import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * @author Martin Pfeffer (pepperonas) */ public class FragmentOne extends Fragment { private static final String TAG = "FragmentOne"; public static Fragment newInstance(int i) { Fragment fragment = new FragmentOne(); Bundle args = new Bundle(); args.putInt("the_id", i); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(TAG, "onCreateView " + ""); return inflater.inflate(R.layout.fragment_one, container, false); } }

github 에서 찾을 수 있습니다.


Martin Pfeffer

orientation 수신기를 사용하여 다른 방향에서 다른 작업을 수행합니다.

 @Override public void onConfigurationChanged(Configuration myConfig) { super.onConfigurationChanged(myConfig); int orient = getResources().getConfiguration().orientation; switch(orient) { case Configuration.ORIENTATION_LANDSCAPE: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case Configuration.ORIENTATION_PORTRAIT: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; default: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); } }

Akshay Paliwal

Android Manifest Activity 에 아래 코드를 입력하세요.

 android:configChanges="orientation"

방향을 변경할 때 활동이 다시 시작되지 않습니다.


Pratik Dasa

AndroidManifest.xml 에서 화면 방향(가로 또는 세로) 수정

android:screenOrientation="portrait" 또는 android:screenOrientation="landscape"

이를 위해 onResume() 메서드가 호출되지 않습니다.


Brajendra Pandey

활동에서 ViewModel 개체를 사용할 수 있습니다.

ViewModel 객체는 구성이 변경되는 동안 자동으로 유지되므로 보유하고 있는 데이터를 다음 활동 또는 프래그먼트 인스턴스에서 즉시 사용할 수 있습니다. 더 읽어보기:

https://developer.android.com/topic/libraries/architecture/viewmodel


Gregory Buiko

출처 : http:www.stackoverflow.com/questions/456211/activity-restart-on-rotation-android

반응형