Reputation: 322
I am trying to display a street view in a fragment.
public class StreetDisplay extends Fragment implements OnStreetViewPanoramaReadyCallback{
SupportStreetViewPanoramaFragment streetFrag;
static final LatLng PosOne = new LatLng(43.771925, -79.512460);
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.street_display, container, false);
initialize();
return v;
}
private void initialize() {
streetFrag =
(SupportStreetViewPanoramaFragment) getFragmentManager()
.findFragmentById(R.id.street);
streetFrag.getStreetViewPanoramaAsync(this);
}
//this method is needed for using a ViewPager swiping feature
public static StreetDisplay newInstance(){
StreetDisplay sd = new StreetDisplay();
return sd;
}
@Override
public void onStreetViewPanoramaReady(StreetViewPanorama panorama) {
panorama.setPosition(PosOne);
}
}
Here's the error message I get when I run my app
Process: com.example.nikhilbhaskar.mapplayground, PID: 22406
java.lang.NullPointerException
at com.example.nikhilbhaskar.mapplayground.StreetDisplay.initialize(StreetDisplay.java:43)
at com.example.nikhilbhaskar.mapplayground.StreetDisplay.onCreateView(StreetDisplay.java:33)
Line 33 is
initialize();
Line 43 is
streetFrag.getStreetViewPanoramaAsync(this);
I am not sure what the problem is - Can you help?
Upvotes: 1
Views: 1650
Reputation: 1
Within fragment use getChildFragmentManager()
instead.
streetFrag = (SupportStreetViewPanoramaFragment) getChildFragmentManager()
.findFragmentById(R.id.street);
Upvotes: 0
Reputation: 6078
I tried the doc from official, and it worked perfectly.
My sample code:
StreetViewActivity
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback;
import com.google.android.gms.maps.StreetViewPanorama;
import com.google.android.gms.maps.StreetViewPanoramaFragment;
import com.google.android.gms.maps.model.LatLng;
public class StreetViewActivity extends FragmentActivity
implements OnStreetViewPanoramaReadyCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_street_view);
StreetViewPanoramaFragment streetViewPanoramaFragment =
(StreetViewPanoramaFragment) getFragmentManager()
.findFragmentById(R.id.streetviewpanorama);
streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
}
@Override
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
streetViewPanorama.setPosition(new LatLng(-33.87365, 151.20689));
}
}
And for the activity_street_view.xml
:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.bjiang.map_ex.StreetViewActivity">
<fragment
android:name="com.google.android.gms.maps.StreetViewPanoramaFragment"
android:id="@+id/streetviewpanorama"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
For more details, please refer here.
EDIT:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.OnStreetViewPanoramaReadyCallback;
import com.google.android.gms.maps.StreetViewPanorama;
import com.google.android.gms.maps.SupportStreetViewPanoramaFragment;
import com.google.android.gms.maps.model.LatLng;
public class StreetDisplay extends FragmentActivity implements OnStreetViewPanoramaReadyCallback {
static SupportStreetViewPanoramaFragment streetViewPanoramaFragment;
static final LatLng PosOne = new LatLng(43.771925, -79.512460);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.street_display);
streetViewPanoramaFragment =
((SupportStreetViewPanoramaFragment)getSupportFragmentManager().findFragmentById(R.id.street));
streetViewPanoramaFragment.getStreetViewPanoramaAsync(this);
}
//this method is needed for using a ViewPager swiping feature
public static Fragment newInstance(){
return streetViewPanoramaFragment.newInstance();
}
@Override
public void onStreetViewPanoramaReady(StreetViewPanorama streetViewPanorama) {
streetViewPanorama.setPosition(new LatLng(-33.87365, 151.20689));
}
}
Upvotes: 1
Reputation: 165
streetFrag =
(SupportStreetViewPanoramaFragment) getFragmentManager()
.findFragmentById(R.id.street);
It is possible that this statement is not creating the object for StreetFrag.
Check whether is streetFrag is null or not.
Upvotes: 1