3

내 앱에서 두 가지 간단한 테마를 구현했습니다. SettingsActivity (extending PreferenceActivity) 안에 선택할 수 있습니다.활동을 재현 할 장소는 어디입니까?

이 시점에서 테마를 변경하면 설정을 호출 한 곳의 활동이 활동 스택의 이전 활동이기 때문에 새로 만든 활동에만 테마가 적용됩니다.

많은 검색을 해본 결과 꽤 유용한 것으로 나타났습니다 : how to restart an activity.

그런데이 코드를 어디에 넣었는지 완전히 명확하지 않습니다. 작동하게하는 유일한 방법은 onRestart() 방법,

에 넣는 것이지만, 이것은 CPU, 배터리 및 사용자 경험이 많이 낭비됩니다.

어떤 도움이 필요합니까?

+0

정확히 어떤 질문입니까? – Kuffs

+0

새로운 모든 테마를 모든 활동에 적용해야합니다. 이것을 달성하기 위해서 나는 오래된 것들도 재창조해야한다. 어떻게해야합니까? – Enrichman

+0

테마가 변경되면 모든 액티비티를 다시 생성 할 수 있도록 사용자가 앱을 시작할 수 있도록합니다. – Kuffs

답변

1

PreferenceChangedListener을 테마 환경 설정으로 설정하십시오. 해고 당하면 사용자를 앱의 최상위 수준으로 다시 정리합니다. 현재 활동을 다시 시작할 수는 있지만 몇 가지 활동이 깊다면 약간의 고통이됩니다. 앱을 처음부터 다시 시작하기가 쉽습니다.

 Intent i = new Intent(this, MainActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     this.finish(); 
     this.startActivity(i); 
+0

마침내이 작업을 수행하는 방법을 관리했습니다. 감사합니다. – Enrichman

1

나는 onPreferenceChanged에 대한 리스너를 등록 할 것이다. 거기에서 당신의 테마 환경 설정이 변경된 것인지 확인하실 수 있습니다. 그런 다음 다음 코드를 사용하여 활동을 다시 시작할 수 있습니다.

Intent intent = getIntent(); 
finish(); 
startActivity(intent); 

getIntent()로 의도를 파악하면 활동이 똑같은 방식으로 시작하는지 확인합니다.

관련 문제