2014-03-12 82 views
0

我正在处理我的第一个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中,我可以在我的菜单中按主页,另一个HomeActivity实例将被添加到堆栈等。

我该如何确保只展示活​​动的一个实例? 有没有更好的方式我这样做?

非常感谢。

+0

应用程序上下文始终是应用程序的立场。 –

回答

2

在您的代码中,this.context.getApplicationContext() instance of ReOrderActivity永远不会成立。您应该将其更改为:this.context instance of ReOrderActivity

您还需要更改在onOptionsItemSelected中如何创建TabMenuManager。将其更改为:TabMenuManager tmm = new TabMenuManager(this);

+0

我尝试过那样,它显示的不是同一个分类。 – Greg

+0

您还需要更改如何创建TabMenuManager - 请参阅我的最新编辑。 – mikejonesguy

+0

是的,你是对的我正在将getApplicationContext()传递给构造函数,但现在我将其更改为此并且它可以工作。更新你的答案,我会接受它。谢谢。 – Greg

相关问题