2014-02-14 83 views
1

我有一個FragmentActivity有幾個MenuItem的。當我按下其中一個MenuItem時,我啓動另一個FragmentActivity,它只是一個模態窗口。當此活動開始顯示ListView時,會發生一些Web服務操作。雖然這發生在一個AsyncTask中,但我想用一個微調器爲MenuItem製作動畫。我有這個工作,像這樣,僞代碼領先:現在從FragmentActivity修改FragmentActivity中的MenuItem

public class ActivityOne extends FragmentActivity { 

    _menuItem.getActionView().setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // this changes the menu item to show an animated spinner 
     _menuItem.setActionView(R.layout.actionbar_indeterminate_progress); 
     Intent intent = new Intent(ActivityOne.this, ActivityTwo.class); 
     startActivityForResult(intent, RESULT_SETTINGS); 
    } 
    }); 
} 

,ActivityTwo裏面,我希望能夠改變菜單項回到非旋轉視圖時長時間運行的任務就完成了......

public class ActivityTwo extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     new AsyncTask<Void, Void, Cursor>() { 

      @Override 
      protected Cursor doInBackground(Void... params) { 
       // do some stuff that takes a bit 
      } 

      @Override 
      protected void onPostExecute(Cursor cursor) { 
       // THIS IS WHERE I NEED TO CHANGE THE MENU ITEM BACK 
      } 
     } 
    } 
} 

任何意見表示讚賞。

回答

0

經過大量的研究和與同事的幾次對話之後,我瞭解到我可以使用本地的BroadcastReceiver實現活動之間的通信。

public class ActivityOne extends FragmentActivity { 

    public static final String MENU_ITEM_EVENT = "com.myApp.MenuItemEvent"; 

    protected void onCreate(Bundle savedInstanceState) { 

     _updateMenuItemReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       _menuItem.getActionView().setVisibility(0); 
      } 
     }; 

     _menuItem.getActionView().setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // this changes the menu item to show an animated spinner 
      _menuItem.setActionView(R.layout.actionbar_indeterminate_progress); 
      Intent intent = new Intent(ActivityOne.this, ActivityTwo.class); 
      startActivityForResult(intent, RESULT_SETTINGS); 
     } 
     }); 
    } 

    @Override 
    protected void onResume() { 
    if (_updateMenuItemReceiver != null) { 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(_updateMenuItemReceiver);  
    } 
} 

和更新的ActivityTwo

public class ActivityTwo extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     new AsyncTask<Void, Void, Cursor>() { 

      @Override 
      protected Cursor doInBackground(Void... params) { 
       // do some stuff that takes a bit 
      } 

      @Override 
      protected void onPostExecute(Cursor cursor) { 
       Intent intent = new Intent(ActivityOne.MENU_ITEM_EVENT); 
       LocalBroadcastManager.getInstance(MyApplication.getContext()).sendBroadcast(intent); 
      } 
     } 
    } 
}