我有一个自定义的片段制表应用程序。有一刻我想在从服务器接收到这样的答案时打开一个片段。然后在这个片段中调用 processResult 方法。但是我在处理过程中使用的 getActivity 得到了 null 结果。
如何等待循环结束以从我的 main 调用 process 方法?
这是来自主要的代码:
@Override
public void onDeleteReservation(final SCHttpResult result,
final SCWebServiceError err) {
final Fragment f = getCurrentFragment();
if (f != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (f instanceof MyTripsFragment) {
((MyTripsFragment) f).processReservationCancel(result,
err);
if (err != null) {
if (err.getType() != SCWebServiceErrorType.SCWebServiceErrorTypeConfirmationNeeded) {
onSCError(err);
}
}
}
}
});
if (!(f instanceof MyTripsFragment)) {
Fragment frag = new MyTripsFragment();
replaceFragment(frag);
((MyTripsFragment)frag).processReservationCancel(result, err);
}}}
如果仍然显示生成应用程序服务器交换的片段,则一切正常,但是如果(有一个错误(我必须在错误上添加 if 测试)并且用户已切换到另一个片段){ 我必须带他回到这个片段来处理错误并问他想做什么。}
在 processReservationCancel 中,我创建了一个 getActivity 来检索主要功能并显示错误。以这种方式失败了:
06-17 15:16:57.580: E/SC - SCMainActivity(12692): Replace Fragmt: class com.snapcar.rider.fragment.MyTripsFragment
06-17 15:16:57.580: E/SC - MyTripsFragment(12692): Process Reservation Cancel
06-17 15:16:57.585: D/SC - BookingFormFragment(12692): BookingFormFragment-°°°°°° remove VIEW °°°°°°
06-17 15:16:57.585: D/SC - MyTripsFragment(12692): MyTripsFragment- result = {"confirmation_message":"\u00cates-vous s\u00fbr de vouloir annuler ? Des frais de r\u00e9servation de 10 \u20ac TTC vous seront factur\u00e9s."}
06-17 15:16:57.590: D/SC - SCBaseFragment(12692): SCBaseFragment-=== removeReq: tag_reservations_delete; removeLoading: true
06-17 15:16:57.590: D/SC - SCBaseFragment(12692): SCBaseFragment-=== cannot remove loading ===
06-17 15:16:57.590: E/SC - SCBaseFragment(12692): toggleLoading - null activity
06-17 15:16:57.590: E/SC - MyTripsFragment(12692): getActivity failed
06-17 15:16:57.605: D/SC - BookingFormFragment(12692): BookingFormFragment-°°°°°° remove VIEW °°°°°°
06-17 15:16:57.650: D/SC - MyTripsFragment(12692): MyTripsFragment-onAttach is CAAAAALLLED
06-17 15:16:57.650: E/SC - MyTripsFragment(12692): Fragment Mytrips created
06-17 15:16:57.670: D/AbsListView(12692): Get MotionRecognitionManager
06-17 15:16:57.670: D/SC - AnalyticsManager(12692): AnalyticsManager-tagScreen - MyTripsFragment starting
06-17 15:16:57.670: E/SC - MyTripsFragment(12692): onResume - start
06-17 15:16:57.670: E/SC - MyTripsFragment(12692): onResume - gonna start getMyTrips
如您所见,主要功能不是等待新片段完成创建以启动 processReservationCancel() ,因此它失败了。
关于如何做的任何想法?
PS:我不能轻易地通过 bundle + flag 给出 processReservationCancel 的参数,因为它不是字符串或布尔值,而是 Http 响应和错误。