2012-08-10 102 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

相关问题