android - 如何从应用程序注销

nar*_*esh 2 android

我的应用程序有5个活动(A1,A2,A3,A4,A5).每个活动都有一个文本视图和一个按钮(B1,B2,B3,B4,B5).如果单击该按钮,则转到下一个活动.假设你单击B1按钮然后它进入A2活动,并且每个活动还有一个菜单按钮(Logout),如果你单击该按钮,它将退出应用程序.但它没有用.在这里,我为每个活动调用使用以下代码.

清除堆栈

 Intent intent = new Intent(act1.this,act2.class);

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    startActivity(intent); 
Run Code Online (Sandbox Code Playgroud)

在Logout按钮中单击监听器,我使用.完成当前活动.finish()因为我们很清楚堆栈使用FLAG_ACTIVITY_CLEAR_TOPnow stack只包含当前活动,这就是我刚刚完成当前活动的原因.但是如果你单击Logout按钮,它只会完成当前的动作.它不会退出应用程序.这里使用该语句清除或不清除堆栈FLAG_ACTIVITY_CLEAR_TOP.以下是我的代码可以任何人帮助我.

行动一

 public class logout extends Activity

    {

          TextView tv;

        Button next;

        public static final int logout_menu = Menu.FIRST+1;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            TextView tv = (TextView) findViewById(R.id.text);
            tv.setText("activity1");

            Button next = (Button) findViewById(R.id.button);
            next.setOnClickListener(nextListener);

        }

        private OnClickListener nextListener = new OnClickListener()
        {
            public void onClick(View v)
            {           
                try
                {                   
                    Intent intent = new Intent(logout.this,act2.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);              
                }
                catch(Exception ex2)
                {
                    System.out.println("Not able to launch Registration Screen"+ex2.toString());
                }
            }
        };

        public boolean onCreateOptionsMenu(Menu menu){
            // TODO Auto-generated method stub
            boolean result = super.onCreateOptionsMenu(menu);
            menu.add(0, logout_menu, 0,  "Logout");   
            return result;
        }

        public boolean onOptionsItemSelected(MenuItem item){        
            // TODO Auto-generated method stub
            switch (item.getItemId()) {
                case logout_menu:finish();

                    break;  
            }
            return super.onOptionsItemSelected(item);
        }                  
    }
Run Code Online (Sandbox Code Playgroud)

Actvity2

 public class act2 extends Activity

 {

        TextView tv;

    Button next;
    public static final int logout_menu = Menu.FIRST+1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TextView tv = (TextView) findViewById(R.id.text);
        tv.setText("activity2");

        Button next = (Button) findViewById(R.id.button);
        next.setOnClickListener(nextListener);

    }

    private OnClickListener nextListener = new OnClickListener()
    {
        public void onClick(View v)
        {           
            try
            {                   
                Intent intent = new Intent(act2.this,act3.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);              
            }
            catch(Exception ex2)
            {
                System.out.println("Not able to launch Registration Screen"+ex2.toString());
            }
        }
    };

    public boolean onCreateOptionsMenu(Menu menu){
        // TODO Auto-generated method stub
        boolean result = super.onCreateOptionsMenu(menu);
        menu.add(0, logout_menu, 0,  "Logout");   
        return result;
    }

    public boolean onOptionsItemSelected(MenuItem item){        
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
            case logout_menu:finish();

                break;  
        }
        return super.onOptionsItemSelected(item);
    }                   
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Bal*_*ake 5

您必须设置setResult(int resultCode)要注销的活动.然后在之前的Activity上你必须捕获这个结果onActivityResult(int requestCode, int resultCode,Intent data).在这里,您可以完成您的活动.再次捕获这里你可以setResult关闭前一个和相同的方法.例:

您在退出菜单上设置结果按:

finish();                     //To finish your current acivity
setResult(R.id.common_menu_logout);
Run Code Online (Sandbox Code Playgroud)

然后在之前的活动:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(resultCode) {
        case R.id.common_menu_logout:           
            setResult(R.id.common_menu_logout);
            closeActivity();            // to close this activity
            break;  
    }
    super.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)