我已经遵循了this解决方案和其他一些解决方案,但似乎我错过了一些东西,我找不到它。
在Fragment A
中,当用户点击按钮时,他们会在地图中选择一个地点。
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
} catch (GooglePlayServicesRepairableException e) {
e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
e.printStackTrace();
}
选择地点后,仍然在同一个片段中,地址将在EditText中。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("checkCall", "here");
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
// get the address
Place place = PlacePicker.getPlace(getActivity().getApplicationContext(), data);
String address = String.format("Place: %s", place.getAddress());
Log.d("address", address);
editTextBizAddress.setText(address);
} else if (resultCode == Activity.RESULT_CANCELED){
dialog("Error in getting the address");
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
所以,在我的父活动中 - MainActivity
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1001:
if(resultCode == RESULT_OK){
String tab = data.getExtras().getString("tab");
if (tab.equals("profile")) {
viewPager.setCurrentItem(2);
}
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
View focus = getCurrentFocus();
if (focus != null) {
hiddenKeyboard(focus);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
View focus = getCurrentFocus();
if (focus != null) {
hiddenKeyboard(focus);
}
}
});
}
break;
case 1:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}
我只设法让它只运行一次。但在那之后,它不再起作用了。虽然我不知道它是如何工作的。
这是因为onActivityResult
中的MainActivity
吗?当其他片段在onActivityResult
中使用MainActivity
时,是否可能混淆?
修改:
我更改了onActivityResult
中的MainActivity
,因为requestCode
具有不同的值,但仍然相同 - 未调用的片段中的onActivityResult
。
答案 0 :(得分:2)
我认为问题是关于
super.onActivityResult...
在活动和片段中。
在活动中评论此行。如果它不起作用 - 尝试相反(从片段中删除它,取消注释活动)
答案 1 :(得分:1)
要让片段能够接收 onActivityResult 的回调,您的活动必须实施onActivityResult()
并且也应该调用super
有关进一步说明,您还可以看到this回答。