2017-12-14 116 views
7

Sự khác nhau giữa startActivityForResult() vs getActivity().startActivityForResult() trong phân đoạn Android là gì? Và sự khác biệt về hành vi trong onActivityForResult() khi được gọi trong Phân đoạn là gì?startActivityForResult() vs getActivity(). StartActivityForResult() trong Android Fragment

+0

https://developer.android.com/reference/android/app/Activity.html#onActivityResult(int, int, android.content.Intent) và https://developer.android.com/training/basics/ intents/result.html –

+0

Bạn có biết rằng có tài liệu về phát triển Android không? –

Trả lời

2

startActivityForResult() phải xử lý nó từ fragment 's onActivityForResult()

getActivity().startActivityForResult() phải xử lý nó từ activity' s onActivityForResult()

Về cơ bản:

Nếu bạn đang ở trên một fragment và bạn muốn xử lý kết quả trên fragment, sử dụng onActivityForResult(), othe rwise nếu bạn muốn xử lý nó từ activity của đoạn, sử dụng getActivity.startActivityForResult()

1

Chúng tôi có thể sử dụng startActivityForResult() bên trong Hoạt động và getActivity().startActivityForResult() bên trong Phân đoạn.

Inshort, để có được bối cảnh hoạt động, chúng tôi đang sử dụng nó với getActiviy().

Thay vào đó, chúng ta có thể gọi onActivityResult đặc biệt Fragment của() như dưới đây từ Actiivty .:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    for (Fragment fragment : getChildFragmentManager().getFragments()) { 
     fragment.onActivityResult(requestCode, resultCode, data); 
    } 
} 

Nếu chúng ta đặt nó để biết thêm chi tiết sau đó,

Nếu Bạn sẽ gọi startActivityForResult() từ Fragment của bạn, requestCode sẽ được thay đổi bởi Activity sở hữu Fragment.

Vì vậy, Nếu bạn muốn nhận được resultCode đúng trong hoạt động của bạn, bạn có thể thử như sau:

KHÔNG SỬ DỤNG: (trong trường hợp như vậy):

startActivityForResult(intent, 1); 

SỬ DỤNG:

getActivity().startActivityForResult(intent, 1); 

Hy vọng nó sẽ giúp ..!

+0

thực sự tôi đã sử dụng 'startActivityForResult()' trong đoạn mà không sử dụng 'getActivity()'. Đó là lý do tại sao tôi hỏi sự khác biệt về hành vi. –

+1

Xem @ j.elmer Không có sự khác biệt nào trong số đó. Nhưng, Một chút khác biệt là chúng ta có thể sử dụng getActivity(). StartActivityForResult() chỉ trong đoạn để có được Ngữ cảnh hoạt động. –

+0

Toàn bộ điểm của một phương thức 'startActivityForResult' riêng biệt trong Fragment là để tránh phải trải qua tất cả các Fragments trong onActivityResult của Activity. Đó chính là điều sai trái để làm. – ianhanniballake

0

Không khác biệt ở tất cả ... Nhưng Một sự khác biệt chút là getActivity() startActivityForResult.() chỉ có thể gọi từ một mảnh :)

2

startActivityForResult từ cuộc gọi đoạn startActivityForResult hoạt động vùng chứa của nó. Vì vậy, đối với Fragment: -

Bắt đầu cuộc gọiActivityForResult (Intent, int) từ hoạt động chứa của đoạn.

Trong khi bạn sử dụng nó trực tiếp một số thay đổi nhất định có thể được thực hiện trên mã yêu cầu.Và bạn sẽ gặp phải một số vấn đề với mã yêu cầu sửa đổi gần đây. Bạn có thể xem xét This Thread.

0

Bạn phải thực hiện cuộc gọi có tham chiếu đến Activity, vì startActivityForResult(Intent intent, int requestCode) là phương thức được chỉ định trong Activity.

Vì vậy, nếu bạn gọi từ YourActivity, nó đã có một tham chiếu của Activity như:

YourActivity extends AppCompatActivity (which is subclass of `Activity`) 

Nhưng nếu bạn đang gọi nó từ YourFragment bạn cần phải xác định Activity tham khảo, mà trong trường hợp này sẽ là Hoạt động có chứa YourFragment; do đó chúng tôi sử dụng getActivity() và sau đó kích hoạt startActivityForResult()

0

"startActivityForResult()" hoạt động trên các lớp Hoạt động. khi bạn đang ở trong lớp Hoạt động, bạn có thể trực tiếp sử dụng phương pháp này. khi bạn đang ở trong phân đoạn, bởi vì phân đoạn tạo ra trên Hoạt động, trước tiên bạn nên có được hoạt động phân đoạn dựa trên nó. có nghĩa là:

//in fragment class: 
Activity activity = this.getActivity(); 

bây giờ bạn có hoạt động và tôi đã nói, bạn có thể sử dụng "startActivityForResult()" trên hoạt động bạn nhận được từ phân đoạn.

activity.startActivityForResult(); 

hy vọng sẽ giúp.

Các vấn đề liên quan