0

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

我的应用程序正在扩展一个导航活动,我确实尝试将它从这个活动中运行出来,但是,我没有 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)

编辑::

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

编辑编辑::

我尝试了@MrZander 的建议,但在我的清单中遇到了问题。

<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>
4

1 回答 1

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"

于 2013-02-11T18:39:54.187 回答