findViewById () gibt null zurück, wenn ich es in onCreate () aufrufe

Ich habe ein Problem mit der findViewById in meiner ersten Android-App. Ich versuche, diese Funktion aufzurufen, gebe aber immer null zurück.

Meine App hat 2 Aktivitäten. In der zweiten Aktivität (activity_display_message) habe ich diesen Code:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_message);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }

    //Obtener el mensaje desde el intent en MainActivity
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    //Buscar el textview en la vista
    TextView textView = (TextView) findViewById(R.id.texto);
    textView.setText(message);
}

Und das ist die fragment_display_message.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.example.app.DisplayMessageActivity$PlaceholderFragment">

<TextView
    android:id="@+id/texto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Ich weiß nicht, warum es NULL zurückgibt und ein erzeugtNullPointerException wenn ich versuche asetText(). Ich rufe die richtige ID auf und erkläre sie auch im XML. Und ich rufe die ansetContextView() auf deronCreate().

Es tut mir leid, wenn diese Frage zu offensichtlich ist (ich glaube, ich ignoriere etwas Offensichtliches), aber ich bin neu in der Android-Entwicklung.

BEARBEITEN: Logcat-Fehler:

02-10 10:25:58.960    1031-1031/com.example.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.app, PID: 1031
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.app/com.example.app.DisplayMessageActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at com.example.app.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:35)
        at android.app.Activity.performCreate(Activity.java:5231)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)

          

Bearbeiten:

Problem gelöst. Müssen nur den Code von verschiebenonCreate() zuonCreateView() und bearbeiten Sie die Referenzen.

onCreate() wird die Standardeinstellung sein.

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_message);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }
}

Und dasonCreateView() aufPlaceholderFragment:

        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_display_message, container, false);

        //Obtener el mensaje desde el intent en MainActivity
        Intent intent = getActivity().getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        //Buscar el textview en la vista
        TextView textView = (TextView) rootView.findViewById(R.id.texto);
        textView.setText(message);

        return rootView;
    }

Antworten auf die Frage(3)

Ihre Antwort auf die Frage