在App上加载活动通过共享首选项启动

时间:2013-02-09 15:00:24

标签: android sharedpreferences

我有一个使用共享首选项的应用程序(第一次),但是,我要运行的第一个活动是检查设置首选项的活动。因此,当应用程序加载时,您将获得此“黑屏”,然后加载正确的活动。

我的应用程序正在扩展导航活动,我确实尝试将其从此活动中运行,但是,我没有onStart,onCreate()等...因为它只是在给Actionbar Sherlock菜单充气。如果我添加onStart(),我会收到一个错误。如果我添加:

,我会得到无限循环
onStart(){getPrefs();super.onStart();}

那么,任何人都可以与我分享我应该如何/在哪里运行这个以便用户没有获得“黑屏”然后正确的活动?我希望在应用启动时启动正确的活动。

以下是我目前加载活动的方式:

public class MainActivity extends NavigationActivity {
    private AQuery aq;
    SharedPreferences myPrefs;
    private String lp;
    private String TAG = "GET PREFS";

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // show no back arrow
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        setContentView(R.layout.activity_firstload);

        aq = new AQuery(this);

        getPrefs();

        aq.id(R.id.tv).text("Loading...");

    }

    private void getPrefs() {
        // Get the xml/preferences.xml preferences
        SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(getBaseContext());
        lp = prefs.getString("defaultreport", "");
        Log.v(TAG, lp);

        if (lp.equals("esac")) {
            Toast.makeText(MainActivity.this, "ESAC", Toast.LENGTH_LONG)
                    .show();
            Intent i = new Intent(MainActivity.this, ESACActivity.class);
            startActivity(i);
        } else if (lp.equals("sac")) {
            Toast.makeText(MainActivity.this, "SAC", Toast.LENGTH_LONG)
                    .show();
            Intent i = new Intent(MainActivity.this, SACActivity.class);
            startActivity(i);
        } else if (lp.equals("msar")) {
            Toast.makeText(MainActivity.this, "MSAR", Toast.LENGTH_LONG)
                    .show();
            Intent i = new Intent(MainActivity.this, MSARActivity.class);
            startActivity(i);
        }

    }

}

我的NavigationActivity包含:

onCreateOptionsMenu(Menu menu)

and 

onOptionsItemSelected(MenuItem item)

EDIT ::

我考虑在启动时添加启动画面以适应此设置更改,但我们希望看到另一个简化的解决方案。

编辑编辑::

我尝试了@MrZander的建议,但在我的Manifest中遇到了一个问题。

<application
        android:allowBackup="true"
        android:icon="@drawable/acricon"
        android:label="@string/app_name"
        android:theme="@style/Theme.Sherlock" 
        android:name="com.Conditions.MainActivity" //This loads the PREFS fine
        >
        <activity
            android:name="com.Conditions.SACActivity" //However, defining this negates the PREFS. My apps first screen is defined by the PREFS. 
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:label="@string/title_activity_main"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.Sherlock"
            android:uiOptions="splitActionBarWhenNarrow" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

1 个答案:

答案 0 :(得分:0)

我会覆盖应用的Application

http://developer.android.com/reference/android/app/Application.html

有些事情如下:

public class MyApplication extends Application{
    @Override
    public void onCreate() {
        //Shared prefs here
    }
}

在您的清单<application>标记中添加此属性:android:name="com.your.package.MyApplication"