Also laut Logcat wird eine NPE geworfen und zwar in der onCreateView der Klasse Fragment_Map (Zeile 39). Jedoch passt das nicht zu dem von dir angegebenen Code. Sind die Klassen gekürzt(umbenannt) worden?
block_
Also laut Logcat wird eine NPE geworfen und zwar in der onCreateView der Klasse Fragment_Map (Zeile 39). Jedoch passt das nicht zu dem von dir angegebenen Code. Sind die Klassen gekürzt(umbenannt) worden?
block_
Guten Morgen block,
ja ich habe hier im post die fragmente umbenannt bzw. überflüssige kommentare entfernt. dachte ich mache es damit übersichtlicher. hatte den eintrag im logcat völlig vergessen. tut mir leid,wollte nicht für verwirrung sorgen
was genau soll denn da falsch sein? sry wenn ich so viel fragen muss aber ich schnall das momentan nicht
was genau soll denn da falsch sein?
NPE bedeutet NullPointerException, eine Eigenheit von Java, die ich überhaupt nicht mag.
Das bedeutet, dass du an irgend ein Objekt eine Nachricht schickst, dieses Objekt jedoch nicht gesetzt, also null ist.
Da dein Code angeblich nicht mit dem Log übereinstimmt, kann ich dir auch nicht sagen, welches Objekt das ist.
Das musst du in deinem eigenen Code vergleichen.
Hallo Lucas de Vil,
was ich nur geändert habe sind die namen der fragmente von Test_Fragment zu Fragment_A und Fragment_Map zu Fragment_B bzw. überflüssige kommentare entfernt. eigentlich nichts großartiges
NPE bedeutet NullPointerException, eine Eigenheit von Java, die ich überhaupt nicht mag.
Das bedeutet, dass du an irgend ein Objekt eine Nachricht schickst, dieses Objekt jedoch nicht gesetzt, also null ist.
Da dein Code angeblich nicht mit dem Log übereinstimmt, kann ich dir auch nicht sagen, welches Objekt das ist.
Das musst du in deinem eigenen Code vergleichen.
Wieso magst du keine NullpointerExceptions?
Das sagt dir doch auch nur das dass Objekt nicht existiert welches du ansprechen willst.
Try Catch und du hast kein problem, oder du programmierst gleich ordentlich dann kommt sowas garnicht erst vor
sorry jungs,
ich habe bei Fragment_B was falsches gopestet (habe es soeben bemerkt und geändert).
Fragment_B sieht so aus:
<?xml version="1.0" encoding="utf-8"?>
<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">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
</RelativeLayout>
Alles anzeigen
und diesmal bekomme ich eine FATAL Exception
01-08 15:16:11.726: E/AndroidRuntime(781): FATAL EXCEPTION: main
01-08 15:16:11.726: E/AndroidRuntime(781): java.lang.NullPointerException
01-08 15:16:11.726: E/AndroidRuntime(781): at swipe.views2.Fragment_B.onCreateView(Fragment_B.java:39)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.view.ViewPager.populate(ViewPager.java:1012)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.view.ViewPager.populate(ViewPager.java:881)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1366)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.View.measure(View.java:15172)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.View.measure(View.java:15172)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.View.measure(View.java:15172)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
01-08 15:16:11.726: E/AndroidRuntime(781): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.View.measure(View.java:15172)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.Choreographer.doFrame(Choreographer.java:525)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.os.Handler.handleCallback(Handler.java:615)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.os.Handler.dispatchMessage(Handler.java:92)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.os.Looper.loop(Looper.java:137)
01-08 15:16:11.726: E/AndroidRuntime(781): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-08 15:16:11.726: E/AndroidRuntime(781): at java.lang.reflect.Method.invokeNative(Native Method)
01-08 15:16:11.726: E/AndroidRuntime(781): at java.lang.reflect.Method.invoke(Method.java:511)
01-08 15:16:11.726: E/AndroidRuntime(781): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-08 15:16:11.726: E/AndroidRuntime(781): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-08 15:16:11.726: E/AndroidRuntime(781): at dalvik.system.NativeStart.main(Native Method)
01-08 15:21:11.768: I/Process(781): Sending signal. PID: 781 SIG: 9
Alles anzeigen
sieht wohl so aus, dass das so gar nicht geht
java.lang.NullPointerException
01-08 15:16:11.726: E/AndroidRuntime(781): at swipe.views2.Fragment_B.onCreateView(Fragment_B.java:39)
ich sehe da immernoch eine nullpointer, du machst was in der methode onCreateView in FragmentB falsch
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
if (mMap != null) {
setUpMap();
}
}
return (RelativeLayout) inflater.inflate(R.layout.fragment_b, container, false);
}
ich weiß gerade auch nicht wie du da inflatest, das sieht alles ein wenig komisch aus xD
Hallo Freunde,
ich bin es nochmal. Nach langem rumbasteln, hin und her veschieben etc. ist es mir gelungen die googlemap v2 karte in einem viewpage, welches 1 fragment und supportmapfragment enthält anzuzeigen. wenn ich mir den code jetzt so ansehe ist das keine große sache, wenn man aber nicht viel darüber weiß und versteht kann der kleinste simple fehler doch ziemlich zeitraubend werden. daher möchte ich das auf keinen fall euch vorenthalten und poste den code für euch hier rein. schließlich habt ihr auch euch bemüht mir zu helfen.
FragmentActivity:
public class MainActivity extends FragmentActivity {
final int RQS_GooglePlayServices = 1;
SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;
TextView tvLocInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
}
// -----------------------###############-----------------------
// -----------------------###############-----------------------
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// -----------------------###############-----------------------
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_legalnotices:
String LicenseInfo = GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo(
getApplicationContext());
AlertDialog.Builder LicenseDialog = new AlertDialog.Builder(MainActivity.this);
LicenseDialog.setTitle("Legal Notices");
LicenseDialog.setMessage(LicenseInfo);
LicenseDialog.show();
return true;
}
return super.onOptionsItemSelected(item);
}
// -----------------------###############-----------------------
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
if (resultCode == ConnectionResult.SUCCESS){
Toast.makeText(getApplicationContext(),
"isGooglePlayServicesAvailable SUCCESS",
Toast.LENGTH_LONG).show();
}else{
GooglePlayServicesUtil.getErrorDialog(resultCode, this, RQS_GooglePlayServices);
}
}
}
Alles anzeigen
FragmentPagerAdapter:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position < 1) {
return SupportMapFragment.newInstance();
// Test_Fragment2 f = new Test_Fragment2(position);
// return f;
}
else {
Test_Fragment f = new Test_Fragment(position);
return f;
}
}
@Override
public int getCount() {
// Show 2 total pages.
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Map Fragment";
case 1:
return "Picture Fragment";
// case 2:
// return getString(R.string.title_section3).toUpperCase();
}
return null;
}
}
Alles anzeigen
TestFragment (Fragment A)
public class Test_Fragment extends Fragment {
private int fragmentNR;
public Test_Fragment(int nr) {
this.fragmentNR = nr;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return (RelativeLayout) inflater.inflate(R.layout.fragment_picture, container, false);
}
}
Alles anzeigen
TestFragment2 (SupportMapFragment):
public class Test_Fragment2 extends SupportMapFragment implements OnMapClickListener {
private int fragmentNR;
final int RQS_GooglePlayServices = 1;
GoogleMap myMap;
public Test_Fragment2(int nr) {
this.fragmentNR = nr;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.map_frament, container, false);
FragmentManager myFragmentManager = getFragmentManager();
SupportMapFragment mySupportMapFragment = (SupportMapFragment)myFragmentManager.findFragmentById(R.id.map);
myMap = mySupportMapFragment.getMap();
myMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
myMap.setMyLocationEnabled(true);
myMap.getUiSettings().setZoomControlsEnabled(true);
myMap.getUiSettings().setCompassEnabled(true);
myMap.getUiSettings().setMyLocationButtonEnabled(true);
myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
//myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
//myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
//myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
myMap.setOnMapClickListener(this);
return layout;
}
@Override
public void onMapClick(LatLng point) {
myMap.animateCamera(CameraUpdateFactory.newLatLng(point));
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity());
if (resultCode == ConnectionResult.SUCCESS){
Toast.makeText(getActivity(),
"isGooglePlayServicesAvailable SUCCESS",
Toast.LENGTH_LONG).show();
}else{
GooglePlayServicesUtil.getErrorDialog(resultCode, getActivity(), RQS_GooglePlayServices);
}
}
}
Alles anzeigen
main.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:orientation="vertical"
tools:context=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
tools:context=".MainActivity" >
<android.support.v4.view.PagerTitleStrip
android:id="@+id/pager_title_strip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="#33b5e5"
android:paddingBottom="4dp"
android:paddingTop="4dp"
android:textColor="#fff" />
</android.support.v4.view.ViewPager>
<!--
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
-->
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="31dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
Alles anzeigen
fragment_picture.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"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="65dp"
android:layout_marginTop="50dp"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
Alles anzeigen
map_fragment:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="380dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
class="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>
Alles anzeigen
funktioniert eigentlich ganz schlön. behinhaltet aber einen kleinen bug. die karte wird auf der seite angezeigt. sobald ich nach links swipe zum anderen fragment ist ein schwarzer balken vor dem picture. ich poste später screenshots für einen besseren übersicht. ihr könnt es ja mal testen... auf dem emulator funzt das mit dem map v2 nicht. das müsst ihr dann direkt am telefon machen.
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!