2013-04-30 3 views
0

대화 상자의 활동 확장을 방지하려면 어떻게해야합니까?Android 대화 상자에서 활동 확장 금지

주 활동에 만들면 "확인"을 클릭해도 새로운 활동이 만들어집니다. 새로 생성 된 활동은 MainActivity에서 확장됩니다.

공유 환경 설정을 사용하여 사용자가 앱을 열 때 사용자를 보낼 위치를 결정하고 있습니다. 그게이 상황에 부딪치게 될지 모르겠습니다.

대화 상자가 MainActivity를 확장하지 못하도록하고 싶습니다. 내가 만든 다른 활동에는 나타나지 않아야합니다. 같은 같은

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    SharedPreferences sharedPreferences = getSharedPreferences("version", 0); 
    int savedVersionCode = sharedPreferences.getInt("VersionCode", 0); 
    int appVershionCode = 0; 

    try { appVershionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode; } 
    catch (NameNotFoundException nnfe) { Log.w(TAG, "$ Exception because of appVershionCode : " + nnfe); } 

    if(savedVersionCode == appVershionCode){ 

     // Returning user 
     Log.d(TAG, "$$ savedVersionCode == appVershionCode"); 

     // Temporary Navigation 
     final Builder alertDialogBuilder = new Builder(this); 
     new AlertDialog.Builder(new ContextThemeWrapper(getBaseContext(), android.R.style.Theme_Dialog)); 
     alertDialogBuilder.setTitle("Temporary Navigation"); 
     alertDialogBuilder.setMessage("Go to the new activity."); 
     alertDialogBuilder.setPositiveButton("Okay", new OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
      Log.d(TAG, "$$ onClick"); 
       Intent newactivity = new Intent(MAINACTIVITY.this,NEWACTIVITY.class); 
       startActivity(newactivity); 
       dialog.cancel(); 
      } 
     }); 
     alertDialogBuilder.show(); 
     // End 

    } else { 

     // First time visitor 
     Log.d(TAG, "$$ savedVersionCode != appVershionCode"); 

     // Hide graphics meant for returning users 
     ((Button)findViewById(R.id.Button01)).setVisibility(View.INVISIBLE); 

     SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit(); 
     sharedPreferencesEditor.putInt("VersionCode", appVershionCode); 
     sharedPreferencesEditor.commit(); 

     Builder alertDialogBuilder = new Builder(this); 
     alertDialogBuilder.setTitle("Welcome"); 
     alertDialogBuilder.setMessage("Click Okay to continue."); 

     alertDialogBuilder.setNeutralButton("Okay", new OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
      Log.d(TAG, "$$ onClick"); 
       Intent leagues = new Intent(MAINACTIVITY.this,NEWACTIVITY.class); 
       startActivity(leagues); 
      } 
     }); 

     alertDialogBuilder.show(); 

    } 
} 

답변

0

시도 dialog.dismiss() : 당신이 해달라고하면 코드의 작은 이해에서

@Override 
     public void onClick(DialogInterface dialog, int which) { 
     Log.d(TAG, "$$ onClick"); 
      Intent newactivity = new Intent(MAINACTIVITY.this,NEWACTIVITY.class); 
      startActivity(newactivity); 
      dialog.dismiss(); 
     } 
+0

감사합니다. 그것은 비록 작동하지 않았다. "Okay"버튼을 클릭하면 새로운 액티비티가 생성되었지만 다이얼로그가 넘겨졌습니다. 전환 할 때마다 또는 새로운 활동을 만들 때마다 대화를 트리거 할 수있는 아무 것도하지 않더라도 대화 상자가 트리거됩니다. – localhost

+0

@PeterMerrill 무슨 일이 일어나는지'onStart' 또는'onResume'이라고 말하기 위해 이것들을 이동 시키려고 했습니까? ... – TronicZomB

+0

제안에 감사드립니다. @TronicZomB. 나는 그것을 시도했고 아무것도 바뀌지 않았다. – localhost

0

, 내 제안은 표시 할 대화를 할 때의 체크를 유지 할 것입니다. 예 : 정적 부울 플래그 showDialog을 사용할 수 있습니다. 사용에 따라 활동에서 true/false로 설정하십시오.

if(savedVersionCode == appVershionCode && showDialog) 

if(savedVersionCode == appVershionCode && !showDialog) 

프로그램 방식의 솔루션에 대한 프로그래밍 방식의 문제가 해결되었습니다. 이 접근법은 단지 제안 일뿐입니다. singleTon 유형의 구조를 따르므로 더 이상 휴대하고 싶은 방법을 확실히 알아야합니다.

두 번째 접근 방식은 이렇게 할 수 없습니다. 당신이 당신의 활동에 구현하고자하는 일반적인 방법은 SharedPref 검사와 관련, 왜되지 않습니다

  1. 가 활동을 확장하는 클래스를 만듭니다.
  2. SharedPref 관련 메소드를 추가하십시오.
  3. 이제 모든 활동에 해당 클래스를 확장 할 수 있습니다.

    public class commonMethod extends Activity{ 
    
    public void my_sharedPrefMethod(){ 
    // do some thing with prefs 
    }  
    
    @OverRide 
    public void onCreate(){ 
    super.onCreate(); 
    // common onCreate code for every activity. Recommend not to change this 
    // so that you can implement 
    } 
    
    // you can also write other methods onPause(), onDestroy() here too. 
    { 
    

지금 당신은이 클래스 commonMethod으로 클래스를 확장 할 수 있습니다. 예 :

public class main extends commonMethod{ 

    @overRide 
    public void oncreate(){ 
    } 

    @overRide 
    public void my_sharedPrefMethod(){ 
    } 

    public void showMyDialog(){ 
    // this way dialog box would not be shown on every activity but just this one. 
    } 
    } 
+0

당신은 당신에게 당신의 제안을 어떻게 사용할 것인지의 예증을 내줄 것이냐? – localhost

+0

@Peter Merrill, 업데이트 된 답변 –

+0

을 참조하십시오. 이 예제에서 작성한 코드 중 일부를 사용할 수있는 방법이 있습니까? – localhost

관련 문제