2017-02-03 121 views
1

我有onActivityResult的問題,無論我在做什麼我無法得到resultCode的權利。onActivityResult - resultCode始終爲0

我知道有類似的問題,但最後他們並沒有幫助我,我不能修復它

MainActivity:方法,該方法將打開新的活動Popup.class

public void openShopView(){ 
    Intent intent = new Intent(this, Popup.class); 
    Bundle b = new Bundle(); 

    b.putString("which", "ShopMain"); 
    intent.putExtras(b); 
    startActivityForResult(intent, 1); 
} 

次活動:方法,該方法將打開另一個活動Popup.class只是不同的佈局

shop_c1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getIntent()); 
      Bundle b = new Bundle(); 

      b.putString("which", "ShopBuildings"); 
      intent.putExtras(b); 
      startActivity(intent); 
      finish(); 
     } 
    }); 

第三活動:和有方法,其應的setResult和靠近活性

building2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Log.i("LOG_NEW: ", "" + getCurrentBuildingTable(1) + ", " + checkSlotTable(1)); 
      if(getCurrentBuildingTable(1) && checkSlotTable(1) == -1) { 
       Intent returnIntent = getIntent(); 
       returnIntent.putExtra("result", 1); 
       setResult(RESULT_OK, returnIntent); 
       finish(); 
      }else if (checkSlotTable(1) == -1){ 
       Log.i("LOG_NEW: ", "Building already exist"); 
      } 
      else{ 
       Log.i("LOG_NEW: ", "Not enough resources"); 
      } 
     } 
    }); 

在末端有onActivityResult()從MainActivity

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    Log.i("LOG_RES: ", "Checking.. " + requestCode + ", " + resultCode); 
    if (requestCode == 1) { 
     if(resultCode == RESULT_OK){ 
      String result = data.getStringExtra("result"); 
      Log.i("LOG_RES: ", result); 

     } 
    } 
} 

無論I」 m我無法啓動if(resultCode == RESULT_OK) loop和resultCode始終爲0 ..

感謝您的幫助

+0

'setResult'必須在**第二個活動叫** ,因爲第二個活動的意圖已在'startActivityForResult'中傳遞 – Saurabh

+0

正如@Saurabh所說,結果僅從使用startActivityForResult啓動的活動中接收。 –

+0

@Saurabk 感謝您的回答,但是有什麼辦法可以發送第三個活動的結果,或者我應該將結果發送到第二個活動並從那裏到主要活動? – fairon201

回答

2

setResult必須次活動被調用,因爲第二個活動的意圖在startActivityForResult獲得通過。

但是,您可以將第三活動的結果代碼委託給第二活動,然後委託給第三活動。

次活動更改爲這樣的事情:

shop_c1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(getIntent()); 
       Bundle b = new Bundle(); 

       b.putString("which", "ShopBuildings"); 
       intent.putExtras(b); 
       startActivityForResult(intent,1); 
       //Remove finish from here 
      } 
     }); 

然後也次活動添加此

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode==1){ 
    setResult(resultCode,data); 
    } 

    finish(); 
} 
+1

謝謝,這是工作得很好,ü救救我;) 只是小筆記,如果有人感興趣我改變了'returnIntent.putExtra(「result」,1);' to'returnIntent.putExtra(「result」,「1 「);'因爲NullPointerException – fairon201