如何更改初始屏幕?

时间:2012-01-13 05:34:48

标签: android

我是Android的新手,我在开发过程中遇到了问题。首先,我的应用程序以一个屏幕(第一个屏幕)开始。

然后它将移动到另一个屏幕(第二个屏幕)。我的要求是:当我重新启动我的应用程序时,它应该从第二个屏幕开始。

如果有人知道如何处理,请告诉我。

6 个答案:

答案 0 :(得分: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 :(得分:1)

Hello kiran我想你不想每次都开始你的第一个屏幕。因此,当您的第一个屏幕第一次显示时,您必须在 SharedPreferences 中设置值。那么每次你必须检查sharedPreferences中是否有任何值?如果有任何值,则在第一个屏幕上启动第二个屏幕。

我尝试了这个并且它有效。

修改: -

我在我的应用程序中使用了这个,因为我的要求是我只需要第一次打开注册屏幕一次。然后在闪屏我写,

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();

    }


}

答案 2 :(得分:0)

你到底想要什么?

如果您希望每次从应用程序退出时都启动应用程序,则必须在SharedPreference中存储值并在每个屏幕中升级它,并且在重新启动/运行时,您可以检查该值并启动该活动。

另外,我的朋友们还在上面发布了另一个选项...试试那个。

答案 3 :(得分:0)

在清单中设置默认活动后,无法更改默认活动。您可以做的是在应用程序的开头有一个默认活动(可能像启动画面)。 将此代码放在默认活动中

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));
}

现在在你的Activity1中使这个布尔值为假

答案 4 :(得分:0)

使用分享偏好。 1.从共享pref中获取boolean var并检查它是true还是false。 2.如果为false,则显示第一个屏幕,将变量设置为true并在共享首选项中保存变量。否则显示第二个屏幕

答案 5 :(得分: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>

    ...