Button reagirert nicht

  • Antworten:12
Hauke Schrills
  • Forum-Beiträge: 67

11.05.2014, 17:04:29 via Website

Hallo Leute

Ich fange an auch in Android Apps zu schreiben.
Nachdem ich mich etwas eingelesen habe, sitz ich nun vor einem Problem:

Mein Projekt hat eine Main Activity und eine Festprogramm Activity. Für beide sind Layouts mit fragments erstellt worden.
Nun soll über einen Button in die zweite Activity gewechselt werden. Es funktioniert jedoch nicht und ich weis nicht wo das Problem liegt.
hier der Code

public class MainActivity extends ActionBarActivity implements OnClickListener{

Button btn_weiter;
@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();
    }

    btn_weiter = (Button) getLayoutInflater().inflate(R.layout.fragment_main,null).findViewById(R.id.buttonWeiter);
    btn_weiter.setOnClickListener(this);
}

@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;
    }
}

@Override
public void onClick(View v) {
    startActivity(new Intent(this,Festprogramm.class));

}

}

Vielen Dank und Gruß
HS

Antworten
Michele
  • Forum-Beiträge: 1.525

11.05.2014, 17:11:20 via Website

Hallo.

Ich weiß ja nicht von wo ihr das immer lernt aber:

btn_weiter = (Button)findViewById(R.id.buttonWeiter);

reicht.

Dazu bitte immer die LogCat zeigen.
Die sagt dir und uns wo der Fehler liegt.

LG

Antworten
Hauke Schrills
  • Forum-Beiträge: 67

11.05.2014, 17:30:52 via Website

Danke für die Antwort

Das hatte ich anfangs auch so gemacht . Jedoch bekam ich dann einen Programmabbruch "unfortunatley ... has stopped"
Ich dacht es käme daher weil der Button im Layout Fragment_main liegt und daher null zurückgibt

Antworten
Michele
  • Forum-Beiträge: 1.525

11.05.2014, 17:32:44 via Website

Dann überlege mal warum er null zurück gibt?
Falscher Button? Button keine richtige ID?

Zeig uns bitte deine LogCat beim Absturz.

LG

Antworten
Hauke Schrills
  • Forum-Beiträge: 67

11.05.2014, 17:40:09 via Website

Ich habe den Button jetzt einmal gelöscht und neu eingesetzt ( mit anderer ID)
Wieder das gleiche
Hier die LogCat:

05-11 11:37:45.462: D/AndroidRuntime(1407): Shutting down VM

05-11 11:37:45.462: W/dalvikvm(1407): threadid=1: thread exiting with uncaught exception (group=0xb2aa0ba8)
05-11 11:37:45.472: E/AndroidRuntime(1407): FATAL EXCEPTION: main
05-11 11:37:45.472: E/AndroidRuntime(1407): Process: de.stalort.schuetzenfestzons2014, PID: 1407
05-11 11:37:45.472: E/AndroidRuntime(1407): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.stalort.schuetzenfestzons2014/de.stalort.schuetzenfestzons2014.MainActivity}: java.lang.NullPointerException
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.app.ActivityThread.access$800(ActivityThread.java:135)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.os.Handler.dispatchMessage(Handler.java:102)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.os.Looper.loop(Looper.java:136)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-11 11:37:45.472: E/AndroidRuntime(1407): at java.lang.reflect.Method.invokeNative(Native Method)
05-11 11:37:45.472: E/AndroidRuntime(1407): at java.lang.reflect.Method.invoke(Method.java:515)
05-11 11:37:45.472: E/AndroidRuntime(1407): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-11 11:37:45.472: E/AndroidRuntime(1407): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
05-11 11:37:45.472: E/AndroidRuntime(1407): at dalvik.system.NativeStart.main(Native Method)
05-11 11:37:45.472: E/AndroidRuntime(1407): Caused by: java.lang.NullPointerException
05-11 11:37:45.472: E/AndroidRuntime(1407): at de.stalort.schuetzenfestzons2014.MainActivity.onCreate(MainActivity.java:32)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.app.Activity.performCreate(Activity.java:5231)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
05-11 11:37:45.472: E/AndroidRuntime(1407): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
05-11 11:37:45.472: E/AndroidRuntime(1407): ... 11 more
05-11 11:37:50.162: I/Process(1407): Sending signal. PID: 1407 SIG: 9

Antworten
Michele
  • Forum-Beiträge: 1.525

11.05.2014, 17:49:20 via Website

05-11 11:37:45.472: E/AndroidRuntime(1407): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.stalort.schuetzenfestzons2014/de.stalort.schuetzenfestzons2014.MainActivity}: java.lang.NullPointerException
und
05-11 11:37:45.472: E/AndroidRuntime(1407): Caused by: java.lang.NullPointerException 
05-11 11:37:45.472: E/AndroidRuntime(1407): at de.stalort.schuetzenfestzons2014.MainActivity.onCreate(MainActivity.java:32) 

Na was bedeutet das wohl? ;)
Ist deine Festprogramm Activity eingetragen in der AndroidManifest.xml?

LG

— geändert am 11.05.2014, 17:49:55

Antworten
Hauke Schrills
  • Forum-Beiträge: 67

11.05.2014, 18:06:31 via Website

Ich habe das im manifest gefunden
sorry , aber ich blicke noch nicht ganz durch

 <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="de.stalort.schuetzenfestzons2014.MainActivity"   <<==
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="de.stalort.schuetzenfestzons2014.Festprogramm"  <<==
        android:label="@string/title_activity_festprogramm" >
    </activity>
</application>

Antworten
Michele
  • Forum-Beiträge: 1.525

11.05.2014, 18:18:02 via Website

Dann zeige bitte deinen Code von der Festprogramm Activity mal.

LG

— geändert am 11.05.2014, 18:18:29

Antworten
Hauke Schrills
  • Forum-Beiträge: 67

11.05.2014, 18:23:52 via Website

Ich habe in der Zwischenzeit schnell noch einmal eine neue App versucht.
Dabei ist mir Aufgefallen , dass ich bei BEIDEN Activities "Blank Activity" und nicht "Empty Activity "
ausgewählt hatte. Mit "Empty Activity" funktioniert der Code.

Antworten
Hauke Schrills
  • Forum-Beiträge: 67

11.05.2014, 18:37:56 via Website

Bekomme den Code hier nicht gespeichert
Hatte aber nur einen Text eingefügt

Antworten
Hauke Schrills
  • Forum-Beiträge: 67

11.05.2014, 18:38:52 via Website

public class Festprogramm extends ActionBarActivity {

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

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.festprogramm, 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_festprogramm,
                container, false);
        return rootView;
    }
}

Antworten
Martin
  • Forum-Beiträge: 756

15.05.2014, 19:48:45 via App

Müsste deine Activity Festprogramm nicht eigentlich von der MainActivity erben?

Antworten
Georg C.
  • Forum-Beiträge: 235

15.05.2014, 20:22:04 via Website

Seid wann es (vermute nach irgendwelchen Updates) so ist - keine Ahnung,
ABER!
Bei Projekt neu- Erstelen wird im Wizard die "Blank Activity" an der ersten Stelle "angeboten". Es wird "Automatisch / wie gewöhnt" weiter gedrückt.
Etwas erfahrene User, merken es und ändern es (Falls dies so nicht gewollt ist).
Neulinge, merken es nicht, dass ihre "Main- Class" nicht von der Activity abgeleitet wird sondern von der ActionBarActivity.
Falls es gewollt ist - OK!
Ich werde aber die Priorität der Ableitung auf Activity setzen.
( public class Main_Foo extends Activity { )
Also, an die Eclipse Team weitersenden - Fertig. :)

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten