Android共享首选项条件活动切换

时间:2011-05-30 14:52:12

标签: android android-activity sharedpreferences switching

我有一个Android应用程序,我用它来注册我的网站上的用户。我的第一个任务是在我的共享首选项文件显示没有注册用户信息时注册用户。

如果我的应用有注册用户,我提供以下代码,只需自动切换到“主页”活动:

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.signin);

        if( USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, "")  == null && USERPREFERENCES.getString(USERPREFERENCES_USERID, "") == null && USERPREFERENCES.getString(USERPREFERENCES_USERNAME, "") == null){
            //setContentView(R.layout.signin);
            Toast.makeText(SignIn.this, "testing...", Toast.LENGTH_LONG).show();
        }else{
            Intent intent   =   new Intent(SignIn.this, Confirmed.class);
            startActivity(intent);
        }
... other code

因此,从我的默认活动signin.java开始,应用程序将切换到已确认的活动或继续显示登录活动。

我的问题是,当系统工作并且我切换到确认活动时,我提供了一个注销onclick监听器,如下所示:

 signout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //USERPREFERENCES.cl
                Toast.makeText(Confirmed.this, "signout responding!", Toast.LENGTH_LONG).show();
                USERPREFERENCES.edit().clear().commit();
            }
        });

它响应并清除所有共享的首选项变量。但是,当我使用我的菜单手动切换到登录活动时,我仍然会切换回确认活动。

即使我可以确认变量是空的,也会发生这种情况。

我希望这可以为那些可以给我一些帮助的人提供场景。感谢。

3 个答案:

答案 0 :(得分:2)

这几乎不会是真的:

USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, "")  == null

如果您使用它,该怎么办?

if( USERPREFERENCES.getString(USERPREFERENCES_USERMAIL, null)  == null && USERPREFERENCES.getString(USERPREFERENCES_USERID, null) == null && USERPREFERENCES.getString(USERPREFERENCES_USERNAME, null) == null){
    //setContentView(R.layout.signin); TRY TO AVOID DOING THIS THING!!!!!
    Toast.makeText(SignIn.this, "testing...", Toast.LENGTH_LONG).show();
}else...

此外,作为建议......而不是在活动之间切换......如果您只创建一个Signing.java活动并在其布局中放置ViewFlipper该怎么办?这样你的应用程序不仅更快,而且更容易维护。

答案 1 :(得分:2)

这是因为当您切换回LoginActivity时,这将被恢复而不是被创建,意味着您在OnCreate中编写的登录代码将不会被调用,因为Dthis time Overrider OnResume已被调用,而不是onCreate。

所以要么在onResume中再次编写此代码,要么在转移到第二个活动之前调用finish(),以便下次调用onCreate()

答案 2 :(得分:1)

如果您导航回第一个活动,则不会再次调用onCreate(除非因缺少资源而销毁活动)。在onResume

中移动身份验证代码