findFragmentById gibt immer eine Null zurück

Ich verwende eine Aktionsleiste im Navigationsmodus in der mainActivity. Unterschiedliche Registerkarten haben unterschiedliche Layouts, und auf einer dieser Registerkarten habe ich ein Layout eingebettet, das ein MapFragment enthält. Mit dem folgenden Code funktioniert die App einwandfrei, die MapFragments funktionieren einwandfrei, die Registerkarten funktionieren einwandfrei. Wenn ich jedoch auf das in myFragment eingebettete MapFragment zugreifen möchte, verwende ich getFragmentManager (). FindFragmentById (R.id.map_add) und erhalte immer null.

Ich habe versucht, mit FragmentManager und FragmentTransaction myfragment und MapFragment hinzuzufügen, erhalte aber weiterhin null von findFragmentById (R.id.map_add). Bitte helfen Sie ...

Die MainActivity wurde folgendermaßen initialisiert:

protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    setContentView(R.layout.main);

    // ActionBar gets initiated
    ActionBar actionbar = getActionBar();
    // Tell the ActionBar we want to use Tabs.
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    // initiating the tabs and set text to it.
    ActionBar.Tab myTab = actionbar.newTab().setText("hey");

    // create the fragments we want to use for display content
    Fragment myFragment = new myFragment();

    // set the Tab listener. Now we can listen for clicks.
    myTab.setTabListener(new MyTabsListener(myFragment));


    // add the tabs to the actionbar
    actionbar.addTab(myTab);
    map=((MapFragment)getFragmentManager().findFragmentById(R.id.map_add)).getMap();//line 103

}

das Layout der MainActivity, main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
</RelativeLayout>

der code des tablisteners:

    class MyTabsListener implements ActionBar.TabListener {
    public Fragment fragment;

    public MyTabsListener(Fragment fragment) {
        this.fragment = fragment;
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {

    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        ft.replace(R.id.fragment_container, fragment);           
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.remove(fragment);
    }

}

der Code von myFragment:

public static class AddAliasFragment extends Fragment {

    private static View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        if (view != null) {
            ViewGroup parent = (ViewGroup) view.getParent();
            if (parent != null)
                parent.removeView(view);
        }
        try {
            view = inflater.inflate(R.layout.myfragment_layout, container, false);
        } catch (InflateException e) {
            /* map is already there, just return view as it is */
        }
        return view;
    }

    public MapFragment getMapFragment(){
        return (MapFragment)getFragmentManager().findFragmentById(R.id.map_add);
    } 

}

das Layout von myFragment: myfragment_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_add_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
    android:id="@+id/search"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/searchhint"
    />

<Button
    android:id="@+id/searchbtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/search"
    android:layout_toRightOf="@id/search"
    android:text="@string/go" />

<fragment 
      android:id="@+id/map_add"
      android:tag="add"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_below="@id/search"
      android:name="com.google.android.gms.maps.MapFragment"/>

Die Logcat-Ausgabe: Die Nullzeiger-Ausnahme bezieht sich auf Zeile 103, die getMap () -Zeile. Ich habe einen Kommentar dahinter im oben genannten Code

04-02 21:23:12.122: E/AndroidRuntime(3672): FATAL EXCEPTION: main
04-02 21:23:12.122: E/AndroidRuntime(3672): java.lang.RuntimeException: Unable to start     activity ComponentInfo{com.test.test/com.test.test.MainActivity}:     java.lang.NullPointerException
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2357)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.app.ActivityThread.access$600(ActivityThread.java:153)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.os.Looper.loop(Looper.java:137)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.app.ActivityThread.main(ActivityThread.java:5226)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at java.lang.reflect.Method.invokeNative(Native Method)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at java.lang.reflect.Method.invoke(Method.java:511)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at dalvik.system.NativeStart.main(Native Method)
04-02 21:23:12.122: E/AndroidRuntime(3672): Caused by: java.lang.NullPointerException
04-02 21:23:12.122: E/AndroidRuntime(3672):     at     com.test.test.MainActivity.onCreate(MainActivity.java:103)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.app.Activity.performCreate(Activity.java:5104)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
04-02 21:23:12.122: E/AndroidRuntime(3672):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
04-02 21:23:12.122: E/AndroidRuntime(3672):     ... 11 more

Antworten auf die Frage(2)

Ihre Antwort auf die Frage