2011-02-17 18 views
13

तो मेरे पास एक बहुत ही सरल ऐप है जिस पर मैं काम कर रहा हूं। इसका उद्देश्य 1 पीसी, और 1 या 2 मॉनीटर से संपत्ति डेटा एकत्र करना है। मेरे फॉर्म में 3 edittext विचार हैं, और 3 बटन (प्रत्येक संपत्ति के लिए एक मैं डेटा एकत्र कर रहा हूं)। बटन बारकोड स्कैनर के लिए startActivityForResult का आह्वान करते हैं, फिर मैं बटन को दबाए गए बटन के आधार पर संबंधित एडिटेक्स्ट व्यू में परिणाम पास करना चाहता हूं (उदाहरण: "एसेट - पीसी" edittext के दाईं ओर "स्कैन" बटन दबाएं, स्कैन करें और डेटा वापस करें इसके साथ जुड़े एडिटेक्स्ट में। फिर यदि आप "एसेट - मोन 1" एडिटेक्स्ट के बगल में "स्कैन" बटन दबाते हैं, तो "एसेट - मोन 1" एडिटेक्स्ट में डेटा वापस करें ... और 0 ...एकाधिक गतिविधि सक्रियता 1 गतिविधि

साथ मेरे पास जो कोड है, सभी आइटम काम करते हैं, बस इरादे से नहीं। किसी भी "स्कैन" बटन को दबाकर हमेशा परिणाम "एसेट - पीसी" के पहले संपादन दृश्य में परिणाम देता है।

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

उत्तर

29

अपने startActivityForResult में, दोनों कॉलों पर 0 का उपयोग न करें ... 0 & 1 जैसी विभिन्न संख्याओं का उपयोग करें ... फिर आप अनुरोध कोड के साथ अपने ऑनएक्टिविटी रीसेट विधि में एक स्विच लागू कर सकते हैं। अगर अनुरोध कोड = 0 तो पहली विधि वापस आ गई है, यदि यह 1 है, तो दूसरा वापस आ गया है। यह अधिक कॉल के लिए समान होना चाहिए।

(पहली बार)

startActivityForResult(intent1, 0); 

(दूसरी बार)

startActivityForResult(intent2, 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(intent3, 2); 

(n वें समय के लिए)

startActivityForResult(intentn, n - 1); 

या, आप का उपयोग करने के, और अधिक पहचानने योग्य पूर्णांक मान के स्थान पर स्थिर पूर्णांक मूल्यों की घोषणा कर सकता है।

+0

धन्यवाद। अब वह उन्हें मेरी ढलान से ज्यादा साफ करता है! जबरदस्त हंसी। मैं उसे एक शॉट दूंगा, लेकिन मुझे अब काम पर चलना होगा। मैं आज दोपहर करूँगा और आपको यह बताने के लिए दोबारा जवाब दूंगा कि मैंने कैसे किया। – Devin

2

आप startActivityForResult जब आप इसके साथ एक requestcode भेजने के लिए, इस विभिन्न (अद्वितीय) अपने हर गतिविधि आप अपने बटन से शुरू कर रहे हैं के लिए किया जाना चाहिए, का कहना है कि बटन 1 शुरू होता है गतिविधि अनुरोध कोड 1, बटन 2 requestcode = 2 , और बटन 3 अनुरोध कोड = 3, फिर आपके मूल गतिविधि के लिए आपके पास केवल एक पर होना चाहिए एक्टिविटी रिसैट() इस फ़ंक्शन में एक स्विच केस लें, अनुरोध कोड स्कैन करें, requestcode = 1 पहली गतिविधि से परिणाम देगा और अनुरोध कोड = 2 देता है गतिविधि 2 और इतने पर ...

+0

धन्यवाद। अब मैं "स्विच" विकल्प की जांच कर रहा हूं। लेकिन, मैंने इसे एक्टिविटी रिसेट के तहत 3 "अगर" कथन के साथ सही तरीके से काम करने के साथ काम किया। कोड पोस्ट करेंगे। कोई भी सुझाव जो इसे साफ़ करने में मदद करेगा, वह भी अद्भुत होगा। आखिरकार, मेरे ऐप में इनमें से बहुत कुछ होने जा रहा है और चूंकि मैं एंड्रॉइड प्रोग्रामिंग के लिए नया हूं, मुझे यकीन है कि मेरे ऐप्स तब तक फूले जाएंगे जब तक कि मैं पर्याप्त एलओएल की संरचना और अनुकूलता सीखूं। – Devin

3

एंड्रॉइड में कुछ भी नहीं है जो कभी भी पहचानने जा रहा है और एक्टिविटी Result2 या AtctivityR पर नामित विधियों को कॉल करने जा रहा है esult3। वे केवल आपके द्वारा बनाए गए विधि नाम हैं जिन्हें सिस्टम द्वारा अनदेखा किया जा रहा है।

आपको अपना कोड बदलना होगा जैसे कि जब आप startActivityForResult() प्रारंभ करते हैं तो आप एक अलग अनुरोध कोड पास करते हैं। (requestCode उस विधि का दूसरा पैरामीटर है)

फिर एक्टिविटी रिसर्च में अनुरोध जांचें कि यह देखने के लिए कि आप किस गतिविधि से परिणाम प्राप्त कर रहे हैं, और तदनुसार संभाल लें।

+0

धन्यवाद। मैं इसके बारे में सोच रहा था, हालांकि आईडीई ने मुझे गर्म नहीं किया था, इसलिए मुझे लगता है कि यह इसे संभालेगा। हां, यह एंड्रॉइड ऐप पर मेरा पहला वास्तविक प्रयास है :) आपकी मदद और आपके धैर्य के लिए धन्यवाद। – Devin

संबंधित मुद्दे