2014-03-12 85 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

相關問題