2012-08-10 104 views
0

我有我的應用程序的教程顯示了當用戶運行它首次在第一次運行打開教程不能正常工作

 Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     public void run() { 
      if (firstRun == true) { 


       Intent tut = new Intent(MainActivity.this, Tutorial.class); 
       startActivity(tut); 
       firstRun = false; 

      } 
     } 
    }, 200); 

我已經推遲,因爲沒有延遲,我只是得到一個黑屏(界面沒有時間加載)

但是這樣做讓我多次打開Tutorial.class,我做錯了什麼?

編輯:

下面是一些更多的代碼,我不會糊所有的它,因爲它是唯一太長閱讀和它不會與問題相關的

我救我偏好這樣的

@Override 
protected void onStop(){ 
    super.onStop(); 

    // We need an Editor object to make preference changes. 
    // All objects are from android.context.Context 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("Counter1", counter); 
    editor.putInt("Counter2", counter2); 
    editor.putBoolean("FirstRun", firstRun); 
    editor.putString("Label1", label1S); 
    editor.putString("Label2", label2S); 

    editor.commit(); 
} 
protected void onPause(){ 
    super.onPause(); 

    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("Counter1", counter); 
    editor.putInt("Counter2", counter2); 

    editor.commit(); 
} 

這是我如何在onCreate()內恢復它們;

// Restore previous settings and data 


    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    int counterRestored = settings.getInt("Counter1", 0); 
    int counter2Restored = settings.getInt("Counter2", 0); 
    boolean firstRunRestored = settings.getBoolean("FirstRun", true); 
    String label1Restored = settings.getString("Label1", "Counter 1"); 
    String label2Restored = settings.getString("Label2", "Counter 2"); 
    counter = counterRestored; 
    counter2 = counter2Restored; 
    firstRun = firstRunRestored; 
    label1S = label1Restored; 
    label2S = label2Restored; 
    renameLabel(); 
    calculateTotal(); 

這是我的第二個活動Tutorial.class

public class Tutorial extends MainActivity{ 

ImageButton btnSkip, btnSkip2, btnNext, btnNext2; 
RelativeLayout tutorial, tutPage1, tutPage2; 


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


    btnSkip = (ImageButton) findViewById(R.id.btn_skip); 
    btnNext = (ImageButton) findViewById(R.id.btn_next); 
    btnSkip2 = (ImageButton) findViewById(R.id.btn_skip2); 
    btnNext2 = (ImageButton) findViewById(R.id.btn_next2); 
    tutorial = (RelativeLayout) findViewById(R.id.tutorial); 
    tutPage1 = (RelativeLayout) findViewById(R.id.page1); 
    tutPage2 = (RelativeLayout) findViewById(R.id.page2); 


    btnSkip.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
    btnSkip2.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
    btnNext.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      tutPage1.setVisibility(View.GONE); 
      tutPage2.setVisibility(View.VISIBLE); 
     } 
    }); 
    btnNext2.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      tutPage1.setVisibility(View.VISIBLE); 
      tutPage2.setVisibility(View.GONE); 
      tutorial.setVisibility(View.VISIBLE); 
      finish(); 
     } 
    }); 

} 

}

+0

我們可以看到整個活動嗎?我不明白你爲什麼需要使用延遲或處理程序。 – Zambotron 2012-08-10 20:45:27

+0

爲什麼教程擴展MainActivity?爲什麼不只是活動? – 2012-08-10 21:03:57

+1

我認爲這是問題..你應該使教程擴展活動,不要忘記@Override註釋onCreate() – 2012-08-10 21:05:56

回答

1

你爲什麼不嘗試

if(firstRun){ 
    firstRun = false; 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     public void run() { 
      Intent tut = new Intent(MainActivity.this, Tutorial.class); 
      startActivity(tut); 
     } 
    } 
    }, 200); 
} 
+0

不起作用,已經測試 – DoubleP90 2012-08-10 19:46:55

+0

這是您開始此活動的唯一地方嗎? – 2012-08-10 19:56:26

+0

是的,在它檢查firstRun變量之後,它只在onCreate()中運行一次,並且將延遲數字更改爲更高也沒有幫助 – DoubleP90 2012-08-10 20:06:00

0

firstRun的值不會超過persistantly存儲幾次運行。

您應該將此值存儲在SharedPreferences中,以便在應用程序關閉後它將保留其值。你可以找到關於如何使用SharedPreferences here的教程。

+0

我正在存儲它,我正在使用的onStop(); 但即使我不保存它,價值將被存儲,直到我將關閉我的應用程序 – DoubleP90 2012-08-10 20:51:07

相關問題