2013-01-03 24 views
1

我的應用程序需要連接到服務器,因此如果沒有設置首選項,它將不起作用。偏好設置使用SharedPreferences。我在尋找的是一種將用戶引導至設置活動的模式。常見的是什麼?強制用戶設置首選項的模式

目前我正在檢查onCreateonResume是否設置了所有首選項,否則我開始設置活動。問題是:

  1. 活動啓動兩次(通過onCreateonResume
  2. 用戶可能不知道,他/她可以回去的主要活動與背部硬件密鑰

任何建議來實現這個?

回答

1

創建LauncherActivity類,您可以進行哪些活動應該開始的決定 - PreferenceActivity,或MainActivity:檢查this建議也

public class LauncherActivity extends Activity { 

    SharedPreferences settings; 

    public void onCreate(Bundle savedInstanceState) { 

     settings = getSharedPreferences(PREFS_NAME, 0); 

     if (settings.getBoolean(PREFS_REG, false)) { 
      startActivity(new Intent(this, MAinActivity.class)); 
      finish(); 
     } else { 
      Intent enableBtIntent = new Intent(this, PreferenceActivity.class); 
     startActivityForResult(enableBtIntent, SETTINGS); 
     } 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if(requestCode == SETTINGS) { 
      startActivity(new Intent(this, MAinActivity.class)); 
      Editor editor = settings.edit(); 
      editor.putBoolean(PREFS_REG, true); 
      editor.commit(); 
      finish(); 
     } 

    } 
} 

如果用戶「註冊」,然後將PREFS_REG到真正onActivityResult()

+1

如果你使用這個方法,我不認爲你想'完成'LauncherActivity',那麼當用戶按下後,堆棧中將沒有活動,它將返回到先前的應用程序。另外,如果刪除'finish()',則需要將所有這些放在'onResume'方法中,否則您只會看到空白的活動。就我個人而言,我認爲從MainActivity的'onResume'調用'startActivity'是更好的解決方案,這正是OP正在做的事情。 –

+0

你是對的我已經添加了onActivityResult()方法 – HiB

+0

這是插入另一個活動真的不錯的主意嗎?從脫鉤的角度來看,這似乎是合理的,但我可以想象它使方式複雜化,例如,當偏好再次失效時。 – Erandir

1
  1. onResume永遠onCreate後調用,所以你只需要進行檢查,並在onResume方法啓動新的活動。

  2. 您可以顯示ToastSettingsActivity負載,如:

    Toast.makeText(context, "Press back to return.", Toast.LENGTH_SHORT).show(); 
    

你也不妨來顯示ToastAlertDialogSettingsActivity開始告訴用戶,他們必須進入這些設置才能使用該應用程序。

1

我建議你用一個按鈕打開你的設置活動,顯示一個彈出對話框,其中包含一個消息,如「首選項設置」。 SharedPreferences的檢查和打開對話框可以在onResume中完成。
然後在用戶完成編輯設置後自動關閉設置活動(並按下保存按鈕)。