2012-04-04 3 views
0

사용자가 몇 가지 앱 옵션을 가지고있는 MainActivity를 만들었습니다. 그리드 메뉴에 표시되어 이후의 특정 활동에 액세스합니다. 그러나 응용 프로그램이 시작되면 AlertDialog를 사용하여 사용자가 로그인 세부 정보를 입력하고 그리드 레이아웃 정의 바로 뒤에 확장됩니다. 그리드 메뉴에서 항목을 선택할 때마다 (그리고 결과적으로 새로운 활동) 문제가 발생하면 AlertDialog가 다시 팝업됩니다. 어떻게 이것을 피할 수 있습니까?MainActivity로 돌아올 때마다 AlertDialog가 다시 시작됩니다.

또한 MainActivity의 시작 부분 (또는 로그인 이후)부터 시작해야하지만 새 활동이 호출 될 때마다 다시 시작해서는 안되는 업로드 서비스가 있습니다. OptionsMenu를 통해 startService 버튼을 사용하여 일시적으로 문제를 해결할 수 있지만이 문제는 이전 문제와 관련 있다고 가정합니다. 이것은 영구적 인 해결책이 아닙니다.

미리 감사드립니다. 그러나

private SharedPreferences prefs; 
private String prefName = "MyPref"; 
int hasLoggedIn; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mm_gridmenu); 

    SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE); 
    hasLoggedIn = prefs.getInt("hasLoggedIn", 0); 

    if (hasLoggedIn == 0) { 
     showDialog(SHOW_DIALOG); 
     prefs = getSharedPreferences(prefName , MODE_PRIVATE); 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putInt("hasLoggedIn", 1); 
     editor.commit(); 
    } 

의 hasLoggedIn 값이 1로 저장하고 대화가 결코 나올없는 위로 다시 방법 :

편집 : 다음과 같이 나는 getSharedPreferences를 사용했습니다. 난 그걸 해결하기 위해 다시 버튼을 설정했지만,이 응용 프로그램을 최소화하는 것으로 보인다 방지하려고합니다. 해당 동작을 버튼에 추가 할 수 있습니까? (나뿐만 아니라 홈 버튼에 중복 것이다)

@Override 
public void onBackPressed() { 
    prefs = getSharedPreferences(prefName , MODE_PRIVATE); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putInt("hasLoggedIn", 0); 
    editor.commit(); 
    Log.i("hasLoggedIn", hasLoggedIn + ""); 
    return; 
} 

는 또한,이 조치가 (에 다시에 AlertDialog를 설정) 이후의 활동에 영향을 미칠 것으로 판단된다. 이것에 대한 유효한 대안은 무엇입니까?

+0

코드 붙여 넣기 ... 코드없이 문제를 해결할 방법을 예측할 수 없습니다. – Cristian

+0

@Cristian, 코드를 본 후 제안 사항이 있습니까? 감사. – Cath

답변

1

기본적으로 응용 프로그램 상태를 추적 할 필요가 있습니다. 몇 가지 옵션이 있습니다. 한 가지 간단한 방법은 SharedPreferences을 사용하여 사용자가 로그인 한 후 에이 값을 설정 한 후 hasLoggedIn과 같은 부울 변수를 저장하는 것입니다. 주 활동이 시작될 때마다 hasLoggedIn의 값이 false으로 설정되어 있으면 사용자가 다시 로그인해야합니다. 그것은 당신이 시도 할 수 있습니다 대화

+0

그건 좋은 생각이야. 어떻게 생각하지 않았 니?! 고마워, 내가 그걸 시도 할게! – Cath

+0

아직 sharedPreferences를 마스터하지 못했습니다. 현재 코드로 내 질문을 편집합니다. – Cath

+0

새로운 문제로 저를 도울 수 있습니까? @slayton – Cath

0

의 로그를 표시하지 않습니다 이미 true 인 경우 : 는 MainActivity에 부울 플래그를 추가

private boolean dialogFlag = true; 

을에서 onCreate/onResume 방법 :

if(dialogFlag) { 
    createDialog(); 
    dialogFlag = false; 
} 

앱이 설치되면 팝업으로 표시하려면이 플래그를 속성 파일에 저장할 수 있습니다. 앱을 시작할 때마다 먼저 읽으십시오.

+0

새 객체가 생성 될 때 MainActivity 객체가 활동을 다시 시작하기 전에 소멸되면이 기능이 작동하지 않습니다. 플래그는'true'의 기본값이됩니다. – slayton

+0

예, 그럴 경우 상태를 유지하는 관리자 클래스를 생성해야합니다. – Javatar

+0

'SharedPrefernces'가이 작업을 수행하기 위해 이미 존재하는 이유는 무엇입니까? – slayton

관련 문제