有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检查上下文是否为当前正在运行的活动

我正在开发我的第一个Android应用程序,我有一个问题无法解决。我检查了堆栈溢出,但找不到解决方案

我有一个菜单,当菜单项被选中时,它会显示4种不同的活动。 我还有一个管理菜单的类:

public class TabMenuManager {

    final Context context;

    public TabMenuManager(Context context) {
        this.context = context;
    }

    public boolean handleTabMenuAction(int item) {
        Log.d("Toolstrea", "TAB MENU HANDLED: " + item);

        switch (item) {
            case R.id.action_home:
                handleHomeAction();
                return true;
            case R.id.action_reorder:
                handleReOrderAction();
                return true;
             //.....
        }
        private void handleReOrderAction() {
            if (this.context.getApplicationContext() instanceof ReOrderActivity) {
                Log.d("Toolstream", "REORDER CLASSES THE SAME");
                Intent reOrderIntent = new Intent(this.context, ReOrderActivity.class);
                reOrderIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                this.context.startActivity(reOrderIntent);
            }
            else
                Log.d("Toolstream", "REORDER CLASSES NOT THE SAME");
           }
       private void handleHomeAction() {
           // Simmilar as one above
       }
    }

在所有活动中,我都会显示我刚刚调用的菜单:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        TabMenuManager tmm = new TabMenuManager(getApplicationContext());
        boolean success = tmm.handleTabMenuAction(item.getItemId());
        if (!success) {
            return super.onOptionsItemSelected(item);
        }
        return success;
}

这门课只是简单的表演活动,但我想确保它不会呈现与当前活动相同的活动。 在这个例子中,我使用:

this.context.getApplicationContext() instance of ReOrderActivity

但我也试过了

this.context.getClass() == HomeActivity.class

它总是记录活动是不同的。 这会导致这样一个问题:如果我在HomeActivity中,我可以在菜单中按Home键,而HomeActivity的另一个实例将被添加到堆栈中,等等

如何确保我只展示了一个活动实例? 有更好的方法吗

非常感谢


共 (1) 个答案

  1. # 1 楼答案

    在代码中,this.context.getApplicationContext() instance of ReOrderActivity永远不可能为真。您应该将其更改为:this.context instance of ReOrderActivity

    您还需要更改在OnOptions ItemSelected中创建TabMenuManager的方式。将其更改为:TabMenuManager tmm = new TabMenuManager(this);