1

アプリケーションにスプラッシュアクティビティを追加しようとしています。このスプラッシュアクティビティは、プログラムが初めて起動したときに開きます。

ただし、アプリが機能し、スプラッシュアクティビティをスキップしてメインアクティビティに移動し、ユーザーが長押ししてホーム画面に移動する場合

その後、ユーザーはアプリに戻ります、、

問題はここにあるので、アプリケーションはスプラッシュアクティビティを再度開きます

アプリケーションがアクティビティを再開するたびにアプリがスプラッシュアクティビティを開かないようにする必要があります。メインアクティビティを直接開く必要があります...

このコードを試しましたが、うまくいきません

スプラッシュアクティビティで..。

public class SplashActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Class<?> activityClass;

        try
        {
            SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
            activityClass = Class.forName(prefs.getString("lastActivity", MainActivity.class.getName()));
        }
        catch(ClassNotFoundException ex)
        {
            activityClass = MainActivity.class;
        }

        startActivity(new Intent(this, activityClass));

        Button btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener(new View.OnClickListener()
        {           
            @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
            }
        }
        );
    }


}

メインアクティビティでは、このコードを使用します

public class Main2Activity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

    }


    @Override
    protected void onPause() {
        super.onPause();

        SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
        Editor editor = prefs.edit();
        editor.putString("lastActivity", getClass().getName());
        editor.commit();
    }

}

私を助けてくれることを願っています

前もって感謝します

よろしく...:)

4

1 に答える 1

2

アプリケーション クラスを使用して、グローバル フラグを保存します。

public class App extends Application {
    private static boolean sFirstRun = false;

    public static boolean fetchFirstRun() {
        boolean old = sFirstRun;
        sFirstRun = false;
        return old;
    }

    //--called when app process is created--
    @Override
    public void onCreate() {
        super.onCreate();

        sFirstRun = true;
    }
}

そして、manifest.xml に以下を追加します。<application android:name=".App"

現在、App.fetchFirstRun()App プロセスが最初から作成されている場合にのみ true になります。アプリが実行されている限り、後続の呼び出しは false を返します。

于 2013-01-04T14:14:33.703 に答える