Android 如何把谷歌地图放在标签上?
我已经用两个选项卡创建了主活动,并且我正在尝试在第一个选项卡片段上实现映射。应用程序显示默认地图,市场为(0,0),但当我单击按钮从文本框中查找新位置时,它崩溃OneFragment java代码:Android 如何把谷歌地图放在标签上?,android,google-maps,android-fragments,Android,Google Maps,Android Fragments,我已经用两个选项卡创建了主活动,并且我正在尝试在第一个选项卡片段上实现映射。应用程序显示默认地图,市场为(0,0),但当我单击按钮从文本框中查找新位置时,它崩溃OneFragment java代码: public class OneFragment extends Fragment implements OnMapReadyCallback, View.OnClickListener{ // implements OnMapReadyCallback, View.OnClickListener
public class OneFragment extends Fragment implements OnMapReadyCallback, View.OnClickListener{ // implements OnMapReadyCallback, View.OnClickListener
private GoogleMap mMap;
private EditText mOriginPlace;
private Button mSearchOriginButton;
private View mView;
public OneFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onMapReady(GoogleMap googleMap) { //when map service started
mMap = googleMap;
LatLng hcmus = new LatLng(10.762963, 106.682394); //create position with latitude and longitude
mMap.addMarker(new MarkerOptions()
.position(hcmus)
.title("Title"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(hcmus, 10));
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setUpMapIfNeeded();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.fragment_one, container, false);
mSearchOriginButton = (Button) mView.findViewById(R.id.searchOriginButton);
mSearchOriginButton.setOnClickListener(this);
return mView;
}
@Override
public void onClick(View v) {
mOriginPlace = (EditText) mView.findViewById(R.id.originPlaceText);
String placeOriginText = mOriginPlace.getText().toString();
List<Address> addressList = null;
if (placeOriginText != null || !placeOriginText.equals("")) {
Geocoder geocoder = new Geocoder(getActivity());
try {
addressList = geocoder.getFromLocationName(placeOriginText, 1);
} catch (IOException e) {
e.printStackTrace();
}
if(addressList.size() > 0) {
Address address = addressList.get(0);
LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
mMap.addMarker(new MarkerOptions()
.position(latLng)
.title("Marker"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
}
} else {
Toast.makeText(getActivity(), "Please enter origin address!", Toast.LENGTH_SHORT).show();
}
}
public void setUpMapIfNeeded() {
if (mMap == null) {
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.originPlaceMap);
mapFragment.getMapAsync(this); //it'll start map service, getMapAsync(), чтобы установить обратный вызов для фрагмента
}
}
由于您没有添加崩溃日志,因此很难给出问题的解决方案。您可以确保更新地图视图是否发生在主UI线程上(使用主循环器)。取决于屏幕导航的方式有时getActivity将为null,请确保也为null。如果您添加崩溃日志,我可以帮助您获得更多信息。Address有时间从geocoder接收结果,因此请尝试将整个onclick方法置于try catch块下。显示崩溃错误?当应用程序崩溃时,您必须发布logcat输出。根据日志,可以进行进一步调查我添加了logcat Output一个问题,,,你看到屏幕上的地图了吗?是的,它显示为我所说的添加了logcat Output你可以在从地址列表检索对象之前添加检查吗。如果(addessList.size>0){然后执行您的工作}Thx,现在它不会崩溃。这意味着geocder无法从EditText获取地址,你能帮个忙吗?我相信你的编辑文本在片段中。如果是这样,请将View设置为全局变量,并使用View.findviewById()初始化编辑文本;并让我知道结果,希望它应该工作,直到不工作,我更新片段代码(如上所述)
04-20 18:44:11.154 6485-6485/com.itshareplus.googlemapdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.itshareplus.googlemapdemo, PID: 6485
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
at fragments.OneFragment.onClick(OneFragment.java:94)
at android.view.View.performClick(View.java:4909)
at android.view.View$PerformClick.run(View.java:20390)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5848)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
04-20 18:44:11.328 6485-6485/com.itshareplus.googlemapdemo I/Process: Sending signal. PID: 6485 SIG: 9