1

我有兩個活動,我想從第一個上下文菜單中調用第二個活動。這是它應該做的。從上下文菜單啓動新的活動並自動執行onCreate中的其他Activity重新啓動相同的活動

  • 活動上下文菜單點擊應當取決於傳入的額外啓動活動B.

  • 在活動B的OnCreate,自動顯示一個對話框AlertBuilder,然後或者拍照或選擇圖片。

發生的事情是,當Activity A的上下文菜單項被點擊時,它會啓動Activity B並顯示AlertDialog。如果我選擇拍攝照片的選項,則啓動MediaStore.ACTION_IMAGE_CAPTURE意圖,拍攝照片後,再次重新啓動活動B並顯示AlertDialog。

活動A - 右鍵菜單

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     final ItemClass selItem = (ItemClass)this.getListView().getItemAtPosition(info.position);  
     Intent intent; 
     SyncData sync; 

     switch (item.getItemId()) { 
      case R.id.start_activity_b: 
      Intent intent = new Intent(ActivityA.this, ActivityB.class); 
      intent.putExtra("data1", selItem.itemID); 
      intent.putExtra("data2", "AUTO"); 
      Measurements.this.startActivityForResult(intent, REQUESTCODE_ACTIVITYB); 


      return true; 
       default: 
        return super.onContextItemSelected(item); 
     } 
    } 

活動B - 的onCreate代碼

@Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.listview_main); 

     Bundle extras = getIntent().getExtras(); 
     if ((extras != null) && (extras.containsKey("data1"))) { 
      this.itemID = extras.getString("data1"); 
     } 
     if ((extras != null) && (extra.containsKey("data2"))) { 
      this.createAlertDialog(); 
     } 
    } 

回答

0

我找到了解決的辦法,試圖遍地明白爲什麼了。所有需要做的事情是在上下文菜單中創建一個可運行的程序,因爲它似乎需要快速返回,否則會重新創建該活動。我可能是錯的,請隨時糾正我在這一個。

活動A - 右鍵菜單

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     final ItemClass selItem = (ItemClass)this.getListView().getItemAtPosition(info.position);  
     Intent intent; 
     SyncData sync; 

     switch (item.getItemId()) { 
      case R.id.start_activity_b: 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Intent intent = new Intent(ActivityA.this, ActivityB.class); 
         intent.putExtra("data1", selItem.itemID); 
         intent.putExtra("data2", "AUTO"); 
         Measurements.this.startActivityForResult(intent, REQUESTCODE_ACTIVITYB); 
        } 
       }); 

       return true; 
      default: 
       return super.onContextItemSelected(item); 
     } 
    } 
+1

這裏你不需要'runnable'。既然你正在使用'startActivityForResult()',你應該可以調用'setResult'並在'Dialog'解除時完成'ActivityB' – codeMagic

1

正如我在我的評論說,你不應該需要runOnUiThread()因爲你已經在UI Thread。有幾種方法可能比這樣做更好。同樣,如我的評論,你應該能夠調用setResult並完成ActivityB,因爲你使用startActivityForResult()開始ActivityB

正是我所看到的應該沒問題。但是,如果由於您在Dialog或其他內容中出現的問題而導致問題,則可以使您的DialogActivity and give it a對話主題by adjusting your清單。使用

<activity android:name=".ActivityName"   
    android:theme="@android:style/Theme.Dialog"> // add this line to give it the effect of a dialog 
</activity> 

您可以使用startActivityForResult()開始此Activity的結果。然後,當結果返回到ActivityB時,您可以完成並返回ActivityA或您需要執行的任何操作。

希望這有助於。