2016-11-11 2 views
1

나는 뒤로 버튼을 클릭 한 후 환경 설정 활동을 닫으려고합니다.하지만 버튼을 누른 다음 멀티 태스킹 버튼을 클릭합니다. 두 개의 활동이 현재 내 애플리케이션에 대해 열리는 것을 볼 수 있습니다. 그리고 난이 내 코드 도움을PereferenceActivity를 닫는 방법

public class List extends PreferenceActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getFragmentManager().beginTransaction().replace(android.R.id.content, new SetFrag()).commit(); 
} 

public static class SetFrag extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings_main); 
    } 
} 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    List.this.finish(); 
} 

감사하다 다시

누르기 전에 난에 있던 preferenceActvivty.

답변

1

나는 해결책을 얻었고, 보통 super.onBackPressed()를 호출하기 전에 코드를 작성해야한다.

그래서이

public class List extends PreferenceActivity { 
// do some stuff 
@Override 
public void onBackPressed() { 
List.this.finish(); 
} 

편집에 코드를 변경 :

을 그래서 여기 내 최종 답변 이 패키지

public class ExitActivity extends Activity 
{ 
@SuppressLint("NewApi") 
@Override protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    if(android.os.Build.VERSION.SDK_INT >= 21) 
    { 
     finishAndRemoveTask(); 
    } 
    else 
    { 
     finish(); 
    } 
} 

public static void exitApplication(Context context) 
{ 
    Intent intent = new Intent(context, ExitActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
    context.startActivity(intent); 
} 
} 

을이 사용자 정의 종료 활동을 붙여되는 매니페스트

에 추가
 <activity 
     android:name=".ExitActivity" 
     android:autoRemoveFromRecents="true" 
     android:theme="@android:style/Theme.NoDisplay" /> 

그리고

@Override 
public void onBackPressed() { 
ExitActivity.exitApplication(getApplicationContext()); 
} 

행운으로 전화

+0

편집 대답을 확인하고 여전히 말해보다 작동하지 않는 경우 나 검토 알려주세요 –

+0

작동하지 않습니다 –

+0

나는 difference..no을 만들 것입니다 볼 수 없습니다 그것은 작동하지 않습니다 .. 내가 코드의 또 다른 부분을 추가 도움이 될 것이라고 생각 –

0

문제 해결!

1 단계 : MainActivity에서 "FLAG_ACTIVITY_NO_HISTORY"플래그를 인 텐트에 추가 한 다음 SettingsActivity를 시작하십시오.

2 단계 : SettingsActivity (PreferenceActivity)의 onBuildStartFragmentIntent() 메소드를 재정 의하여 FLAG_ACTIVITY_FORWARD_RESULT 플래그를 추가하여 activityresult가 MainActivity로 돌아갈 수 있도록합니다.

아래처럼 : @Override 여전히

public Intent onBuildStartFragmentIntent (String fragmentName, 
             Bundle args, 
             int titleRes, 
             int shortTitleRes) 
    { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.setClass(this, getClass()); 
     intent.putExtra(EXTRA_SHOW_FRAGMENT, fragmentName); 
     intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args); 
     intent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE, titleRes); 
     intent.putExtra(EXTRA_SHOW_FRAGMENT_SHORT_TITLE, shortTitleRes); 
     intent.putExtra(EXTRA_NO_HEADERS, true); 
     intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);//the new statement 
     return intent; 
    }