如何在操作栏菜单中注销

时间:2016-07-06 18:44:53

标签: android

我曾经在按下活动时使用注销按钮注销,但现在我愿意将它放在操作栏菜单中。我不知道怎么做。

我想做什么:如果用户在右侧操作栏菜单上按下注销,他应该退出应用程序。

这是我一直用来按下按钮时注销的代码(考虑到活动页面只有注销按钮):

public class Activity_Main extends Activity {

private Button btnLogout;
private SQLiteHandler db;
private SessionManager session;

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

     btnLogout = (Button) findViewById(R.id.btnLogout);

    // SqLite database handler
    db = new SQLiteHandler(getApplicationContext());

    // session manager
    session = new SessionManager(getApplicationContext());

    if (!session.isLoggedIn()) {
        logoutUser();
    }

    // Logout button click event
    btnLogout.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            logoutUser();
        }
    });
}

/**
 * Logging out the user. Will set isLoggedIn flag to false in shared
 * preferences Clears the user data from sqlite users table
 * */
private void logoutUser() {
    session.setLogin(false);

    db.deleteUsers();

    // Launching the login activity
    Intent intent = new Intent(Activity_Main.this, Activity_Login.class);
    startActivity(intent);
    finish();
}

目前,操作栏菜单中有两个项目更多的应用和评分应用程序重定向到谷歌播放..我想用注销操作替换更多的应用程序。

这是我想要修改的内容:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action bar actions click
    switch (item.getItemId()) {
    case R.id.rate_app:
        try {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())));
        } catch (android.content.ActivityNotFoundException anfe) {
            startActivity(new Intent(Intent.ACTION_VIEW,
                    Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
        }
        return true;
    case R.id.more_app:
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.more_apps))));
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

这是menu.xml

<item
    android:id="@+id/ic_menu"
    android:icon="@drawable/ic_ab_overflow_compat"
    android:showAsAction="always"
    android:title="">
    <menu>

        <!-- Rate App -->
        <item
            android:id="@+id/rate_app"
            android:showAsAction="ifRoom|withText"
            android:title="@string/rate"/>

        <!-- More App -->
        <item
            android:id="@+id/more_app"
            android:showAsAction="ifRoom|withText"
            android:title="@string/more"/>
    </menu>
</item>

2 个答案:

答案 0 :(得分:2)

在你的menu.xml文件中,我假设你有这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/rate_app"
    android:title="@string/rate_app"
    android:orderInCategory="100"
    app:showAsAction="showIfRoom" />

<item
    android:id="@+id/action_logout"
    android:title="@string/logout"
    android:orderInCategory="100"
    app:showAsAction="showIfRoom" />

现在,在你的`onOptionsItemSelected(MenuItem菜单)中,切换就像你已经在做的那样:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   // toggle nav drawer on selecting action bar app icon/title
   if (mDrawerToggle.onOptionsItemSelected(item)) {
      return true;
   }
   // Handle action bar actions click
   switch (item.getItemId()) {
   case R.id.rate_app:
     try {
         startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())));
     } catch (android.content.ActivityNotFoundException anfe) {
        startActivity(new Intent(Intent.ACTION_VIEW,
                Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName())));
    }
    return true;
   case R.id.action_logout:
    logoutUser();
    return true;
   default:
     return super.onOptionsItemSelected(item);
  }
}

这可以帮助您实现所需。让我知道它是怎么回事!

答案 1 :(得分:0)

有一个带有操作栏按钮的menu.xml文件。您可以替换注销按钮的任何按钮,并且开关盒控制单击哪个按钮。 在正确的案例中,添加注销功能的代码。