Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查上下文当前是否正在运行活动_Java_Android - Fatal编程技术网

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

Java 如何检查上下文当前是否正在运行活动,java,android,Java,Android,我正在开发我的第一个Android应用程序,我有一个问题无法解决。我检查了堆栈溢出,但找不到解决方案 我有一个菜单,当选择菜单项时,它会显示4种不同的活动。 我还有一个管理菜单的类: public class TabMenuManager { final Context context; public TabMenuManager(Context context) { this.context = context; } public bool

我正在开发我的第一个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的另一个实例将添加到堆栈中,依此类推

如何确保我只演示了一个活动实例? 我有没有更好的办法


非常感谢。

在您的代码中,
这个.context.getApplicationContext()ReOrderActivity的实例
永远不会为真。您应该将其更改为:
this.context ReOrderActivity实例


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

应用程序上下文始终是应用程序的一种状态。我这样尝试过,结果显示重新排序类不一样。您还需要更改创建TabMenuManager的方式--请参阅我的最新编辑。是的,您说得对。我将getApplicationContext()传递给构造函数,但现在我将其更改为此,它可以工作。更新您的答案,以便我接受。谢谢。我再问你一个问题。我的活动中有注销按钮,一旦用户按下它,我就调用finish();在我的活动中。我如何从我的TabMenuManager类调用这个方法?有很多方法可以做到这一点。一种方法是这样的:如果(Activity的context instanceof Activity){Activity Activity=(Activity)context;Activity.finish();}您还可以让您的Activity类实现一个接口,并让您的TabMenuManager类使用该接口来完成()活动。