Kevin
Kevin

Reputation: 13

App crashes after implementing onClickListener

I just implemented the onClickListener. The App should switch between two layouts. On each layout there is one button. After touching the button the Layout should change.

I searched trough various tutorials and documentary, my code should be correct, I simply don't see the error. Eclipse also says the code is ok.

    package ralationship.v1;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class RelationshipActivity extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
    private Button OptionsButton;
    private Button SaveButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SaveButton = (Button)findViewById(R.id.btnSave);
        OptionsButton = (Button)findViewById(R.id.btnOptions);
        OptionsButton.setOnClickListener(this);
        SaveButton.setOnClickListener(this);

    }

    public void onClick(View v) {
        if(v.getId() == (R.id.btnOptions)){
            setContentView(R.layout.options);
        }else if (v.getId() == (R.id.btnSave)){
            setContentView(R.layout.main);
        }

    }

}

Does anyone find an error?

//EDIT:

Here is the LogCat Report:

01-26 15:47:29.273: D/dalvikvm(336): GC_EXTERNAL_ALLOC freed 49K, 53% free 2549K/5379K, external 1625K/2137K, paused 67ms
01-26 15:47:29.453: D/AndroidRuntime(336): Shutting down VM
01-26 15:47:29.462: W/dalvikvm(336): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-26 15:47:29.473: E/AndroidRuntime(336): FATAL EXCEPTION: main
01-26 15:47:29.473: E/AndroidRuntime(336): java.lang.RuntimeException: Unable to start activity ComponentInfo{ralationship.v1/ralationship.v1.RelationshipActivity}: java.lang.NullPointerException
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.os.Looper.loop(Looper.java:123)
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.app.ActivityThread.main(ActivityThread.java:3683)
01-26 15:47:29.473: E/AndroidRuntime(336):  at java.lang.reflect.Method.invokeNative(Native Method)
01-26 15:47:29.473: E/AndroidRuntime(336):  at java.lang.reflect.Method.invoke(Method.java:507)
01-26 15:47:29.473: E/AndroidRuntime(336):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-26 15:47:29.473: E/AndroidRuntime(336):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-26 15:47:29.473: E/AndroidRuntime(336):  at dalvik.system.NativeStart.main(Native Method)
01-26 15:47:29.473: E/AndroidRuntime(336): Caused by: java.lang.NullPointerException
01-26 15:47:29.473: E/AndroidRuntime(336):  at ralationship.v1.RelationshipActivity.onCreate(RelationshipActivity.java:22)
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-26 15:47:29.473: E/AndroidRuntime(336):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-26 15:47:29.473: E/AndroidRuntime(336):  ... 11 more
01-26 15:47:33.633: I/Process(336): Sending signal. PID: 336 SIG: 9

Upvotes: 1

Views: 1034

Answers (2)

Jave
Jave

Reputation: 31846

I assume that your saveButton is in the R.layout.options layout? If so, it is not available to be found when your activity is first created, as you only have the content from R.layout.main. You should instead put the lines

SaveButton = (Button)findViewById(R.id.btnSave);
SaveButton.setOnClickListener(this);

inside the onClickListener, after you have changed the layout with setContentLayout() to the correct layout.

Upvotes: 1

L7ColWinters
L7ColWinters

Reputation: 1362

if the options button is in the options xml than you have to inflate that manually. When you call setContentView and assign a layout xml you can then automatically inflate from what is on that specific xml. If you need to inflate anything else you have to use a layoutInflater context.getSystemService(context.layoutInflaterservice)

basically dont instantiate the options button until you set the content view to it

Upvotes: 1

Related Questions