Android: วิธีทำให้กิจกรรมส่งคืนผลลัพธ์ไปยังกิจกรรมที่เรียกมันว่า?


129

ฉันมีLocationกิจกรรมที่สามารถเรียกจากกิจกรรมเป็นจำนวนมากเช่นและSign up OrderในLocationกิจกรรมผู้ใช้ป้อนตำแหน่งของตนดังนั้นกิจกรรมLocationจะส่งคืนตำแหน่งใหม่นี้ให้กับกิจกรรมนั้นซึ่งเรียกว่า

ดังนั้นเมื่อSign upกิจกรรมเรียกLocationกิจกรรมนั้นจะต้องคืนข้อมูลให้กับSign upกิจกรรม เวลาอื่นOrderกิจกรรมจะทำในสิ่งเดียวกัน

บันทึก

ฉันรู้ว่าคุณจะบอกฉันว่าฉันควรโพสต์รหัส แต่ฉันไม่ได้ขอให้คุณให้รหัสฉัน ฉันแค่อยากได้เคล็ดลับลิงค์หรือกระทู้ดีๆ


คุณสามารถใช้ Finish () โทรกลับ ..
Harshid

1
คุณตรวจสอบ StartActivityForResult developer.android.com/reference/android/app/Activity.html
vinaykumar

@Harshid คุณช่วยกรุณาให้รายละเอียดเพิ่มเติมหรือถ้าคุณมีลิงค์ที่จะได้รับการชื่นชม
ผู้ใช้

คำตอบ:


254

ในการเริ่มต้นกิจกรรมที่ควรส่งคืนผลลัพธ์เป็นกิจกรรมการโทรคุณควรทำสิ่งต่างๆดังต่อไปนี้ คุณควรส่งรหัสคำขอตามที่แสดงด้านล่างเพื่อระบุว่าคุณได้รับผลลัพธ์จากกิจกรรมที่คุณเริ่ม

startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);

ในกิจกรรมคุณสามารถใช้setData()เพื่อส่งคืนผลลัพธ์

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

ดังนั้นอีกครั้งในกิจกรรมแรกที่คุณเขียนโค้ดด้านล่างใน onActivityResult ()

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
            // OR
            // String returnedResult = data.getDataString();
        }
    }
}

แก้ไขตามความคิดเห็นของคุณ: หากคุณต้องการส่งคืนสามสตริงให้ทำตามสิ่งนี้โดยใช้คู่คีย์ / ค่าด้วยความตั้งใจแทนการใช้ Uri

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

รับไว้ในonActivityResultดังนี้:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}

คุณพูดอะไร? ฉันไม่เข้าใจความคิดเห็นล่าสุดของคุณขอโทษฉันพูดภาษาอังกฤษไม่เก่งฉันกำลังลองใช้รหัสของคุณตอนนี้requestcodeฉันจะใส่จำนวนเต็มอะไรได้บ้าง
ผู้ใช้งาน

1
ฉันบอกว่าไม่มีปัญหา (NP) และอย่างที่คุณบอกว่าคุณอาจจะดำเนินการเรื่องนี้ช้าฉันตอบว่าให้ใช้เวลาของคุณเองแล้วแสดงความคิดเห็นเพื่อที่ฉันจะได้รับการแจ้งเตือน มาถึง requestcode ใช่คุณสามารถให้ค่าจำนวนเต็มเช่น int requestCode = 1;
กั ณ ฑ

ใช่มันทำงานถูกต้องฉันยอมรับคำตอบของคุณขอบคุณมากฉันอยากจะถามคุณว่ามีวิธีที่ไม่ใช่แค่ส่งสตริงฉันต้องการส่ง 3 สตริงเช่น "เมือง", "สตรีท", " home "มีวิธีติดป้ายกำกับไหมครับ?
ผู้ใช้งาน

คำตอบของคุณยอดเยี่ยมมากถ้าคุณต้องการแก้ไขชื่อเพื่อให้ผู้ใช้จำนวนมากสามารถค้นหาได้
ผู้ใช้

ฉันกำลังมองหาวิธีสร้างจุดประสงค์ : new Intent(this, OtherActivity.class);ฉันสามารถใช้รหัสนี้ในกิจกรรมได้
ผู้ใช้

3

หากคุณต้องการดำเนินการให้เสร็จสิ้นและเพียงแค่เพิ่มresultCode(ไม่มีข้อมูล) คุณสามารถโทรsetResult(int resultCode)มาก่อนfinish()ได้

ตัวอย่างเช่น:

...
if (everything_OK) {
    setResult(Activity.RESULT_OK); // OK! (use whatever code you want)
    finish();
}
else {
   setResult(Activity.RESULT_CANCELED); // some error ...
   finish();
}
...

จากนั้นในกิจกรรมการโทรของคุณให้ตรวจสอบresultCodeเพื่อดูว่าเราสบายดีหรือไม่

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == Activity.RESULT_OK) {
            // OK!
        }
        else if (resultCode = Activity.RESULT_CANCELED) {
            // something went wrong :-(
        }
    }
}

startActivityForResult(intent, someCustomRequestCode)อย่าลืมที่จะเรียกกิจกรรมด้วย


4
มูลค่าActivity.RESULT_OKเป็นจริง-1ในกรณีที่ทำให้ใครบางคนสับสน ฉันขอแนะนำให้ใช้Activityค่าคงที่
jacoballenwood
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.