我的应用程序具有viewPager和4个片段的活动。
在一个片段中,我添加了一个Google SupportPlaceAutocompleteFragment
和
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.area_swipe_fragment, container, false);
SupportPlaceAutocompleteFragment autocompleteFragment = (SupportPlaceAutocompleteFragment)
getChildFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
Toast.makeText(ctx, "do something", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Status status) {
}
});
return view;
}
我的问题是onPlaceSelectedListener
永远不会被解雇,我无法获得所选地点的结果。而是被解雇放在第二个片段中的onActivityResults()
。
我尝试在第一个片段中使用onActivityResults()
但它没有被触发,总是执行第二个片段中的那个。
有什么想法吗?
答案 0 :(得分:2)
来自the docs:
如果您的片段嵌套在另一个片段中,您的应用也必须 forward onActivityResult()调用包含的片段,如图所示 在以下代码段中:
// 1
double dx = xPos - b.xPos;
double dy = yPos - b.yPos;
double r = Math.sqrt(dx*dx + dy*dy);
double F = G * mass * b.mass / (r*r);
// 2
double Fx = G * mass * b.mass / Math.pow( Math.sqrt(Math.pow(2,xPos-b.xPos) + Math.pow(2,yPos-b.yPos)), 2);
也许这就是解决方案。
答案 1 :(得分:1)
The @AndrewR answer took me on the right track, very similar to the comments, I override onActivityResult
however it didn't work.
The problem was the host Activity
wasn't calling the super
:
public class HostActivity extends AppCompatActivity {
//Please don't forget other relevant methods
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//super.onActivityResult... is the important line
//Add other custom behaviours
}
}
答案 2 :(得分:0)
假设为您的api密钥正确启用了针对Android服务的Google Places API,即使我使用SupportPlaceAutocompleteFragment观察到类似的问题,其中onPlaceSelected永远不会在地点选择上被触发。然而,后来当我尝试使用intent方法时,事情很有效。
答案 3 :(得分:0)
今天早上我遇到了这个问题,经过一堆阅读和随机类似的问题后,我得到了以下工作。
如果您查看SupportPlaceAutocompleteFragment的源代码,您会看到它调用
public class SupportPlaceAutocompleteFragment extends Fragment {
private void zzzG() {
...
try {
Intent var2 = (new IntentBuilder(2)).setBoundsBias(this.zzaRk).setFilter(this.zzaRl).zzeq(this.zzaRj.getText().toString()).zzig(1).build(this.getActivity());
this.startActivityForResult(var2, 1);
}
...
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1) {
...
}
super.onActivityResult(requestCode, resultCode, data);
}
}
根据您的集成,这会导致RequestCode更改为1以外的其他内容。通过扩展它来覆盖startActivityForResult,您可以通过调用getActivity()来更改行为.startActivityForResult而不是this.startActivityForResult
public class WrappedSupportPlaceAutocompleteFragment extends SupportPlaceAutocompleteFragment {
@Override
public void startActivityForResult(Intent intent, int requestCode) {
this.getActivity().startActivityForResult(intent, requestCode);
}
}
从那里你可以按照AndrewR提到的那样,将活动的活动结果传递给片段并获得预期的结果。