android - 如何从应用程序注销

标签 android

我的应用程序有 5 项 Activity (A1、A2、A3、A4、A5)。每个 Activity 都有一个 TextView 和一个按钮(B1、B2、B3、B4、B5)。如果您单击该按钮,则进入下一个 Activity 。假设如果您单击 B1 按钮,那么它会转到 A2 Activity ,并且每个 Activity 还有一个菜单按钮(注销),如果您单击该按钮,那么它将从应用程序退出。但它不起作用。 在这里,我对每个 Activity 调用使用以下代码。

用于清除堆栈

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

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    startActivity(intent); 

在注销按钮单击监听器中,我使用 finish() 完成了当前 Activity 。因为我们使用 FLAG_ACTIVITY_CLEAR_TOP 清除了堆栈,现在堆栈仅包含当前 Activity ,这就是为什么我刚刚完成当前 Activity 。但是,如果您单击“注销”按钮,它只会完成当前 Activity 。它不会从应用程序中退出。这里堆栈被清除或不使用该语句FLAG_ACTIVITY_CLEAR_TOP。以下是我的代码,任何人都可以帮助我。

Activity 一

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

Activity 2

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

谢谢

最佳答案

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

您在注销菜单上设置结果按如下:

finish();                     //To finish your current acivity
setResult(R.id.common_menu_logout);

然后在之前的 Activity 中:

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

关于android - 如何从应用程序注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6826757/

相关文章:

android - Eclipse 不生成 R.java 和 gen 文件夹

android - 如何保护 Android 应用程序免受 .apk 备份应用程序的侵害

android - 如何保存和恢复android WebView的WebBackForwardList?

android - AppBaseTheme在Android应用中做什么

java - HoloEverywhere Spinner OnClickListener() 错误

java - 如何从嵌套的 Hashmap 中获取数据?

Android GestureListener 未检测到事件

android - 使用 Kotlin 进行数据绑定(bind)会导致 Resources$NotFoundException

android - 使用 gson 解析 JSON 对象

android - WebView重置UiMode并打破黑暗主题