2012-01-13 75 views
0

我是android新手,在開發中遇到問題。首先我的應用程序從一個屏幕(第一個屏幕)開始。如何更改初始屏幕?

然後它會移動到另一個屏幕(第二個屏幕)。我的要求是:當我重新啓動我的應用程序時,它應該從第二個屏幕開始。

如果有人知道如何處理這個問題,請告訴我。

+0

重新啓動的條件是什麼? – 2012-01-13 05:37:15

+0

再次運行我的應用程序 – kiran 2012-01-13 05:39:38

回答

2

您需要將標誌存儲在第一個屏幕出現的地方。我認爲做這件事最好的地方是在你的應用程序共享首選項中。 (請參閱指南主題Data Storage

然後您需要使用該標誌。這是一種方法。將第二個屏幕設爲默認啓動活動。在onCreate方法中,檢查標誌是否已設置,如果沒有,則使用請求代碼> = 0調用startActivityForResult作爲第一個屏幕。不管標誌的值如何,通常爲第二個活動完成onCreate

您的第一項活動是在其onCreate方法中設置成功的結果代碼。然後,返回第二個活動,覆蓋onActivityResult,以便當它收到請求代碼的成功結果時,它將設置標誌。

這是有效的,因爲如果您從第二個活動中調用startActivityForResult,屏幕將顯示第一個活動,而不是第一個閃爍第二個活動。另外,如果第一個活動由於某種原因而崩潰,第二個活動將不會收到成功結果代碼,並且該標誌將不會被設置,因此用戶仍然會看到第一個活動。

下面是一些示例代碼:

第一項活動:

private static final String PREFS_NAME = "prefs"; 
private static final String KEY_SHOW = "show1"; 
private static final int REQUEST_1 = 0; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    if (settings.getBoolean(KEY_SHOW, true)) { 
     Intent intent = new Intent(this, Activity1.class); 
     startActivityForResult(intent, REQUEST_1); 
    } 
    . . . // the rest of onCreate as normal 
} 

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_1 && resultCode == RESULT_SUCCESS) { 
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putBoolean(KEY_SHOW, true); 
     editor.commit(); 
    } 
} 

次活動:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setResult(RESULT_SUCCESS); 
    . . . 
} 
1

您好基蘭我想你不希望在開始你的第一個畫面每次。因此,您必須在第一次顯示第一個屏幕時設置SharedPreferences中的值。那麼每次你必須檢查sharedPreferences中是否有任何值時?如果有任何值,則開始第二屏幕otherzise第一屏幕。

我試過這個,它工作。

編輯: -

我用這個在我的應用程序,我的要求是我不得不打開註冊屏幕只有一次/只第一次。然後在啓動畫面我寫的,

package com.z.z.z; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

public class SplashActivity extends Activity 
{ 
    RelativeLayout lerSplash; 
    SharedPreferences sharedPreferences; 
    private String strUName_pref; 
    private String TAG = "SplashActivity"; 

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

     Log.d(TAG, "in onCreate"); 

     lerSplash = (RelativeLayout)findViewById(R.id.lerSplash); 

     Handler handler = new Handler(); 
     handler.removeCallbacks(runnable); 
     handler.postDelayed(runnable, 3000L); 

     sharedPreferences = this.getSharedPreferences("PREFERENCE_NAME",MODE_WORLD_READABLE); 

    } 

    Runnable runnable = new Runnable() 
    { 
     public void run() 
     { 
      strUName_pref = sharedPreferences.getString("PREFERENCE_NAME", null); 

      if(strUName_pref != null) 
      { 
       Intent intent = new Intent(SplashActivity.this,MainTabActivity.class); 
       startActivity(intent); 
       finish(); 
      } 
      else 
      { 
       Intent intent = new Intent(SplashActivity.this,RegistrationActivity.class); 
       startActivity(intent); 
       finish(); 
      } 
     } 
    }; 

} 

然後在RegistrationActivity我寫

package com.z.z.z; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

public class RegistrationActivity extends Activity 
{ 

    SharedPreferences sharedPreferences; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.registration); 
     Log.d(TAG, "in onCreate"); 

     sharedPreferences = this.getSharedPreferences("PREFERENCE_NAME",MODE_WORLD_READABLE); 
     SharedPreferences.Editor prefsEditor = sharedPrefs.edit(); 
     prefsEditor.putString("SharedPreferenceValue", "YOUR_VALUE_WHICH_YOU_WANT_TO_PUT"); 
     prefsEditor.commit(); 

    } 


} 
+0

如果您不介意請給我一些示例 – kiran 2012-01-13 05:48:03

+0

請檢查我的答案。 – anddev 2012-01-13 06:14:58

0

你想要什麼到底是什麼?

如果您希望每次從應用程序退出時啓動應用程序,則必須在SharedPreference中存儲值並在每個屏幕中對其進行升級,並在Restart/run上檢查該值並啓動該活動。

否則您還有另一個選項,由我的朋友張貼上面...嘗試一個。

0

在清單中設置默認活動後,無法更改默認活動。你可以做的是在應用程序的開始處有一個默認的活動(可能像一個啓動畫面)。 在活動1在默認的活動有此代碼現在

private SharedPreferences appPreferences = getSharedPreferences("user", MODE_PRIVATE); 
final SharedPreferences.Editor editor = appPreferences.edit(); 
      editor.putBoolean("flag", true); 
editor.commit(); 

if(editor.getBoolean("flag",false)) 
{ 
startActivity(new Intent(DefaultActivity.this,Activity1.class)); 
} 
else 
{ 
startActivity(new Intent(DefaultActivity.this,Activity2.class)); 
} 

使這個布爾值false

0

使用份額的偏好。 1.從共享的pref中獲取boolean var,並檢查它是true還是false。 2.如果它是假的,則顯示第一個屏幕,將變量設置爲true並將變量保存在共享首選項中。否則顯示第二個屏幕

0

我有這個相同的問題。我對Android開發非常陌生 - 所以我的答案可能有缺陷,但這對我來說很有用。

轉到您的AndroidManafest.xml文件。您的活動定義部分應該是這個樣子:

... 

    <activity 
     android:name="com.example.test.OriginalFirstScreen" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.example.test.NewFirstScreen" 
     android:label="@string/title_activity_new_first_screen" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    ... 

我刪除從OldFirstScreen活動定義標籤和左/中NewFristScreen定義添加它。這個伎倆。見下 -

... 

    <activity 
     android:name="com.example.test.OriginalFirstScreen" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.example.test.NewFirstScreen" 
     android:label="@string/title_activity_new_first_screen" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    ...