Android 如何打开片段而不是活动

Android 如何打开片段而不是活动,android,android-fragments,Android,Android Fragments,这是迄今为止我的应用程序: 地图活动性: public class MapsActivity extends FragmentActivity implements GoogleMap.OnMarkerDragListener, OnMapReadyCallback, GoogleMap.OnMapLongClickListener, GoogleMap.OnMarkerClickListener, GoogleMap.OnMapLoadedCallback { private GoogleM

这是迄今为止我的应用程序: 地图活动性:

public class MapsActivity extends FragmentActivity implements GoogleMap.OnMarkerDragListener, OnMapReadyCallback, GoogleMap.OnMapLongClickListener, GoogleMap.OnMarkerClickListener, GoogleMap.OnMapLoadedCallback {

private GoogleMap mMap;
private HashMap<LatLng, CustomMarker> list;
public static String TAG = MapsActivity.class.getClass().getName();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    list = new HashMap<>();
    Log.e(TAG, "onCreate()");



}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    mMap.setOnMarkerClickListener(this);
    mMap.setOnMapLoadedCallback(this);
    mMap.setOnMapLongClickListener(this);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }
    mMap.setMyLocationEnabled(true);
    mMap.setOnMarkerDragListener(this);
    Log.e(TAG, "onMapReady");
}


@Override
public void onMapLoaded() {
    retrieveMarkersFromDB();
    Log.e(TAG, "onMapLoaded");
    Toast.makeText(MapsActivity.this, "Touch and hold to create a marker", Toast.LENGTH_SHORT).show();

}


private void retrieveMarkersFromDB() {
    new GetMarkers().execute();
}

@Override
public void onMapLongClick(LatLng latLng) {
    mMap.addMarker(new MarkerOptions().position(latLng).draggable(true));
    CustomMarker customMarker = getMarkerAddress(latLng);
    addMarkerToList(customMarker,latLng);
    Toast.makeText(MapsActivity.this, "Marker Added", Toast.LENGTH_SHORT).show();

}

private void addMarkerToList(CustomMarker customMarker, LatLng latLng) {
    list.put(latLng, customMarker);
}

private CustomMarker getMarkerAddress(LatLng latLng) {
    CustomMarker customMarker = null;
    Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
    try {
        List<Address> allAddresses = geocoder.getFromLocation(latLng.latitude,latLng.longitude,2);
        Address oneAddress = allAddresses.get(0);
        try{
            if(!oneAddress.getLocality().equals("null")||!oneAddress.getLocality().isEmpty()){
                customMarker = new CustomMarker(oneAddress.getAddressLine(0)+", "+oneAddress.getLocality(),oneAddress.getCountryName(),"","");
            }

        }catch (NullPointerException e){
            customMarker = new CustomMarker(oneAddress.getAddressLine(0),oneAddress.getCountryName(),"","");
        }


    } catch (IOException e) {
        e.printStackTrace();
    }catch (IndexOutOfBoundsException er){
        customMarker = new CustomMarker("N/A","N/A","","");
    }
    return customMarker;
}

@Override
public boolean onMarkerClick(Marker marker) {
    Intent intent = new Intent(this,com.example.fixxxer.mapapp.MarkerScreen.class);
    CustomMarker customMarker = list.get(new LatLng(marker.getPosition().latitude,marker.getPosition().longitude));
    intent.putExtra("addressLine",customMarker.getAddressLine());
    intent.putExtra("countryName",customMarker.getCountryName());
    intent.putExtra("imageURL",customMarker.getImageURL());
    intent.putExtra("comment",customMarker.getComment());
    intent.putExtra("lat",marker.getPosition().latitude);
    intent.putExtra("lng",marker.getPosition().longitude);
    startActivityForResult(intent,1);
    return true;
}

@Override
protected void onDestroy() {
    new DatabaseHelper(this,null,null,1).addMarkers(list);

    super.onDestroy();
}

@Override
public void onMarkerDragStart(Marker marker) {
    marker.remove();
    list.remove(marker.getPosition());
    Toast.makeText(MapsActivity.this, "Marker removed", Toast.LENGTH_SHORT).show();
}

@Override
public void onMarkerDrag(Marker marker) {

}

@Override
public void onMarkerDragEnd(Marker marker) {

}


public class GetMarkers extends AsyncTask<Void,Void,Void>{


    @Override
    protected Void doInBackground(Void... params) {
        Log.e(TAG,"background task started");
        list=new DatabaseHelper(MapsActivity.this,null,null,1).getallmarkers();
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        Log.e("onPostExecute","background task ready");
        Log.e(TAG,String.valueOf(list.size()));
        if (!list.isEmpty()){
            for (LatLng position: list.keySet() ) {
                mMap.addMarker(new MarkerOptions().position(position).draggable(true));
            }
        }
        super.onPostExecute(aVoid);
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.e("Main", "onActivityResult()");
    if (requestCode == 1) {
        if (resultCode == MarkerScreen.RESULT_COMMENT_ONLY) {
            String comment = data.getStringExtra("Comment");
            String[]split = data.getStringExtra("Index").split(",");
            list.get(new LatLng(Double.valueOf(split[0]),Double.valueOf(split[1]))).setComment(comment);

        }else if (resultCode == MarkerScreen.RESULT_IMAGE_ONLY) {
            String imageURI = data.getStringExtra("Image");
            String[]split = data.getStringExtra("Index").split(",");
            list.get(new LatLng(Double.valueOf(split[0]), Double.valueOf(split[1]))).setImageURL(imageURI);
        } else if (resultCode == MarkerScreen.RESULT_BOTH) {
            String comment = data.getStringExtra("Comment");
            String imageURI = data.getStringExtra("Image");
            String[]split = data.getStringExtra("Index").split(",");
            list.get(new LatLng(Double.valueOf(split[0]), Double.valueOf(split[1]))).setComment(comment);
            list.get(new LatLng(Double.valueOf(split[0]), Double.valueOf(split[1]))).setImageURL(imageURI);
        } else {
            Log.e("Main", "Result - no change");
        }
    }

}
activity_maps.xml

 xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.fixxxer.mapapp.MapsActivity">
<include layout="@layout/map_layout"/>

但是我得到一个
未找到视图的错误。有没有一个简单的方法可以做到这一切?我对片段很在行。

使用
R.id.map
代替
containerwid
替换这样的片段代码

    getFragmentManager()
.beginTransaction()
.replace(R.id.map, BlankFragment.newInstance())
.addToBackStack(null) // enables back key
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) // if you need transition
.commit();

使用
R.id.map
代替
containerwid
替换如下片段代码

    getFragmentManager()
.beginTransaction()
.replace(R.id.map, BlankFragment.newInstance())
.addToBackStack(null) // enables back key
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) // if you need transition
.commit();

您尚未创建视图,因此不会出现视图异常。您的xml中是否有id=
containerWebID
的视图这是我为加载在“onCreateView()”中的空白片段生成的xml,您没有给它任何id我正在尝试用新片段替换map\u布局,无Id错误适用于BlankFragments的无视图,然后使用Id映射代替containerView,因为您尚未创建视图,因此您将获得无视图异常。您的xml中是否有id=
containerWebID
的视图这是我为加载在“onCreateView()”中的空白片段生成的xml,您没有给它任何id我正在尝试用新片段替换map\u布局,无Id错误适用于BlankFragments的无视图,然后使用Id映射代替containerView Id
getFragmentManager()
.beginTransaction()
.replace(R.id.layout.map_layout, BlankFragment.newInstance())
.addToBackStack(null) // enables back key
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) // if you need transition
.commit();
    getFragmentManager()
.beginTransaction()
.replace(R.id.map, BlankFragment.newInstance())
.addToBackStack(null) // enables back key
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) // if you need transition
.commit();