findViewById liefert null

  • 5 Antworten
  • Letztes Antwortdatum
H

Hemlam

Neues Mitglied
0
Hallo zusammen,

nachdem ich mich jetzt schon stundenlang durch das Forum und den Rest des iNet gewühlt habe ...

Ich schaffe es einfach nicht eine id für einen EditText zu bekommen.

Der folgende Code ist bis auf die 4 Zeilen von mir in onCreate() das, was ADT nach Erstellung eines neuen Projekts ausgibt.

Was mache ich denn hier falsch?

Vielen Dank!

Code:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

public class Main extends ActionBarActivity {

    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
        
        // MEINS ANFANG
        EditText tmp = (EditText) findViewById(R.id.ETDate);
        if (tmp != null) {
            tmp.setText("test");
        }
        // MEINS END
    }

    @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) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;
        }
    }
}
Code:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    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="the.na.fets.sdapp.Main$PlaceholderFragment" >

    <EditText
        android:id="@+id/ETDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

        <requestFocus />
    </EditText>
 </RelativeLayout>
 
Ist der XML-Code activity_main.xml oder fragment_main.xml?
 
sry ...
es ist fragment_main.xml


hier ist activity_maim.xml
Code:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="the.na.fets.sdapp.Main"
    tools:ignore="MergeRootFrame" />
 
Wenn findViewById null zurückgibt bedeuted das, das diese View nicht gefunden wurde. Ich hab mich mit Fragments noch nicht so viel beschäftigt, aber ich denke du musst an das View-Objekt des Fragments kommen und dann sowas wie "fragmentView.findViewById" machen.

EDIT: Wie wärs eigtl mal mit Google? http://bit.ly/1ktvDwL erster Link, erste Antwort!
 
Zuletzt bearbeitet von einem Moderator:
Mit setContentView setzt du das Layout activity_main.xml als Rootlayout.

Das heißt findViewById(R.id.ETDate) sucht in diesem Layout deinen EditText. Dort gibt es aber kein View mit der ID. Deshalb liefert die Methode findViewById() den Wert null zurück.

Aber du kannst auch einfach oben im Forum auf der Hauptseite für Entwickler nachschauen.

https://www.android-hilfe.de/forum/...ng.9/nullpointerexception-was-tun.522368.html
 
Vielen Dank für eure Hilfe!

Dieser Code hier tut, was ich wollte:

Code:
public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            
            View mView = rootView.findViewById(R.id.textView1);
            ((TextView) mView).setText("schreib_hier_was");
            
            return rootView;
        }
    }

war tatsächlich hier zu finden:
Fragment | Android Developers

@burgerohnealles: Ja, Google ist toll, wenn man weiß, nach was genau man suchen muss :winki:
 
Zurück
Oben Unten