2011-02-17 73 views
13

所以我有一個非常簡單的應用程序,我正在努力。目的是從1臺電腦和1臺或2臺顯示器收集資產數據。 我的表單包含3個edittext視圖和3個按鈕(每個資產都有一個用於收集數據)。這些按鈕爲條形碼掃描器調用startActivityForResult,然後我想根據按下哪個按鈕將結果傳遞給相關的edittext視圖(例如:按下「Asset - PC」edittext右側的「scan」按鈕,掃描並返回數據然後如果按下「資產 - Mon1」編輯文本旁邊的按鈕「掃描」,則將數據返回到「資產 - Mon1」編輯文本...等等......)多個onActivityResult 1活動

With我在這裏的代碼,所有的項目工作,只是沒有預期的。按任何「掃描」按鈕總是將結果返回到第一個編輯文本視圖「資產 - PC」。

public class TestShit extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

    public void assetPcClick(View view) { 
     Intent intent1 = new Intent("com.google.zxing.client.android.SCAN"); 
     intent1.setPackage("com.google.zxing.client.android"); 
     intent1.putExtra("SCAN_MODE", "ONE_D_MODE"); 
     startActivityForResult(intent1, 0); 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     if (requestCode == 0) { 
      if (resultCode == RESULT_OK) { 
       String contents1 = intent.getStringExtra("SCAN_RESULT"); 
       String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
       EditText assetPC = (EditText) findViewById(R.id.assetPC); 
       assetPC.setText(contents1); 
      } else if (resultCode == RESULT_CANCELED) { 
       // Handle cancel 
      } 
     } 
    } 

    public void assetMon1Click(View view) { 
     Intent intent2 = new Intent("com.google.zxing.client.android.SCAN"); 
     intent2.setPackage("com.google.zxing.client.android"); 
     intent2.putExtra("SCAN_MODE", "ONE_D_MODE"); 
     startActivityForResult(intent2, 0); 
    } 

    public void onActivityResult2(int requestCode, int resultCode, Intent intent2) { 
     if (requestCode == 0) { 
      if (resultCode == RESULT_OK) { 
       String contents2 = intent2.getStringExtra("SCAN_RESULT"); 
       String format2 = intent2.getStringExtra("SCAN_RESULT_FORMAT"); 
       EditText assetMon1 = (EditText) findViewById(R.id.assetMon1); 
       assetMon1.setText(contents2); 
      } else if (resultCode == RESULT_CANCELED) { 
       // Handle cancel 
      } 
     } 
    } 

    public void assetMon2Click(View view) { 
     Intent intent3 = new Intent("com.google.zxing.client.android.SCAN"); 
     intent3.setPackage("com.google.zxing.client.android"); 
     intent3.putExtra("SCAN_MODE", "ONE_D_MODE"); 
     startActivityForResult(intent3, 0); 
    } 

    public void onActivityResult3(int requestCode, int resultCode, Intent intent3) { 
     if (requestCode == 0) { 
      if (resultCode == RESULT_OK) { 
       String contents3 = intent3.getStringExtra("SCAN_RESULT"); 
       String format3 = intent3.getStringExtra("SCAN_RESULT_FORMAT"); 
       EditText assetMon2 = (EditText) findViewById(R.id.assetMon2); 
       assetMon2.setText(contents3); 
      } else if (resultCode == RESULT_CANCELED) { 
       // Handle cancel 
      } 
     } 
    } 

}

我如何能更好地管理我的多個 「ActivityForResult」 和 「onActivityResult」 的有什麼建議?


我的修復,謝謝你的幫助!

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     if (requestCode == 0) { 
      if (resultCode == RESULT_OK) { 
       String contents1 = intent.getStringExtra("SCAN_RESULT"); 
       String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
       EditText assetPC = (EditText) findViewById(R.id.assetPC); 
       assetPC.setText(contents1); 
      } else if (resultCode == RESULT_CANCELED) { 
       // Handle cancel 
      } 
     } 
     if (requestCode == 1) { 
      if (resultCode == RESULT_OK) { 
       String contents1 = intent.getStringExtra("SCAN_RESULT"); 
       String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
       EditText assetMon1 = (EditText) findViewById(R.id.assetMon1); 
       assetMon1.setText(contents1); 
      } else if (resultCode == RESULT_CANCELED) { 
       // Handle cancel 
      } 
     } 
     if (requestCode == 2) { 
      if (resultCode == RESULT_OK) { 
       String contents1 = intent.getStringExtra("SCAN_RESULT"); 
       String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
       EditText assetMon2 = (EditText) findViewById(R.id.assetMon2); 
       assetMon2.setText(contents1); 
      } else if (resultCode == RESULT_CANCELED) { 
       // Handle cancel 
      } 
     } 
    }  
+2

您是否好心地選擇正確的答案?信貸去信貸到期...;) – ThaMe90 2011-03-15 15:27:44

回答

29

在你的startActivityForResult,請不要在兩個調用中使用0 ......使用不同的數字,如0 & 1 ...然後你可以在你的onActivityResult方法中使用requestCode實現一個開關。如果requestCode = 0,則返回第一個方法,如果它是1,則返回第二個方法。對於更多呼叫,這應該是相同的。

public void onActivityResult(int requestCode, int resultCode, Intent intent){ 
    switch(requestCode){ 
     case 0: // Do your stuff here... 
     break; 
     case 1: // Do your other stuff here... 
     break; 
     case etc: 
     break; 
    } 
} 

的呼聲應該是這樣的,那麼: (第一次)

startActivityForResult(intent1, 0); 

(對於第二次)

startActivityForResult(intent2, 1); 

(第三次)

startActivityForResult(intent3, 2); 

(第n次)

startActivityForResult(intentn, n - 1); 

或者,你可以聲明,而不是使用更面目全非int類型,靜態INT值。

+0

謝謝。現在,看起來更清潔他們我的污水!大聲笑。我會盡力,但我現在必須跑步去上班。我今天下午會這樣做,然後再次回覆,讓大家都知道我是怎麼做的。 – Devin 2011-02-17 15:51:28

2

當你startActivityForResult您發送requestcode它, 這應該是不同的(唯一的)爲您的每一個活動,您從您的按鈕啓動,說扣1點開始活動請求代碼1,按鈕2 requestcode = 2 ,並且按鈕3的請求代碼= 3,那麼對於你的父活動,你必須在這個函數中只有一個onActivityResult() 採取切換的情況下,掃描requestcodes,requestcode = 1將給出第一個活動的結果,並且請求代碼= 2給出活動2等等......

+0

謝謝。我現在正在調查「切換」選項。但是,我通過在onActivityResult下調用3個「if」語句正確工作。將張貼代碼。任何有助於清理的建議都會很棒。最後,在我的應用中會出現很多這樣的內容,因爲我是Android編程的新手,我相信我的應用會變得臃腫起來,直到我學會構建和壓縮足夠好的LOL爲止。 – Devin 2011-02-17 15:43:55

3

Android中沒有任何東西可以識別並調用名爲onActivityResult2或onActivityR的方法esult3。這些只是您製作的方法名稱,將被系統忽略。

您需要更改代碼,以便在調用startActivityForResult()時傳遞不同的請求代碼。 (requestCode是該方法的第二個參數)

然後在onActivityResult中檢查requestCode以查看您從哪個活動獲取結果並進行相應處理。

+0

謝謝。我很想知道,儘管IDE沒有讓我感到溫暖,所以我認爲它可以處理它。是的,這是我第一次真正嘗試在Android應用程序:)謝謝你的幫助和耐心。 – Devin 2011-02-17 15:37:15