【发布时间】:2019-07-20 21:09:44
【问题描述】:
我正在做一个小项目...项目适用于地图,但是setContentView 方法存在问题,当我扩展Fragment 而不是FragmentActivity 时它不起作用。 注意:我需要扩展Fragment 而不是Fragment Activity,因为代码部分显示的代码只是项目的一小部分。在我的原始项目中,如果我将Fragment 更改为FragmentActivity,则会出现另一个类中的问题。
public class MapsActivity extends Fragment implements OnMapReadyCallback,LocationListener,GoogleMap.OnMarkerClickListener{
private GoogleMap mMap;
private DatabaseReference mUsers;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Dosn't Work with Fragment Extends ?!
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
mUsers= FirebaseDatabase.getInstance().getReference("Users");
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
googleMap.setOnMarkerClickListener(this);
mUsers.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot s : dataSnapshot.getChildren()){
UserInformation user = s.getValue(UserInformation.class);
assert user != null;
LatLng location = new LatLng(user.latitude,user.longitude);
mMap.addMarker(new MarkerOptions().position(location).title(user.name)).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public boolean onMarkerClick(Marker marker) {
return false;
}
}
我希望应用程序正常运行并根据 firebase 中的数据在地图上显示不同的标记,但该应用程序无法正常工作。 注意:如果我将 Fragment 更改为 FragmentActivity 它可以正常工作..
我尝试创建视图,但应用程序无法正常工作 “应用已停止”
public class MapsActivity extends Fragment implements OnMapReadyCallback,LocationListener,GoogleMap.OnMarkerClickListener{
private GoogleMap mMap;
private DatabaseReference mUsers;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_maps, container, false);
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
mUsers= FirebaseDatabase.getInstance().getReference("Users");
return view;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
googleMap.setOnMarkerClickListener(this);
mUsers.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot s : dataSnapshot.getChildren()){
UserInformation user = s.getValue(UserInformation.class);
assert user != null;
LatLng location = new LatLng(user.latitude,user.longitude);
mMap.addMarker(new MarkerOptions().position(location).title(user.name)).setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public boolean onMarkerClick(Marker marker) {
return false;
}
当我将片段更改为片段活动时,出现错误是另一活动中的这一行
getSupportFragmentManager().beginTransaction().replace(R.id.container,new HomeFragment()).commit();
当 HomeFragment 扩展 Fragment 时没有错误,但是当我将其更改为 Fragment Activity 时,错误出现在 [new HomeFragment()] 中。
【问题讨论】:
-
Fragment 中没有 setContentView。您需要使用 onCreateView。
-
我试过了,但是当我吃午饭的时候;应用已停止,无法正常工作?!
-
不能用
Fragment替换Activity。 -
好的,当我扩展 Fragment Activity 时,另一个 Activity 中出现错误,请查看第三个代码
标签: java android-studio fragment