我刚刚实现了onClickListener。应用程序应在两个布局之间切换。每个布局都有一个按钮。触摸按钮后,布局应该更改。
我搜索了各种教程和纪录片,我的代码应该是正确的,我根本看不到错误。 Eclipse也说代码没问题。
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);
}
}
}
有没有人发现错误?
//编辑:
以下是LogCat报告:
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
答案 0 :(得分:1)
如果选项按钮位于选项xml中,则必须手动充气。当你调用setContentView并分配一个布局xml时,你可以自动从该特定xml上的内容中膨胀。如果你需要充气,你必须使用layoutInflater context.getSystemService(context.layoutInflaterservice)
在将内容视图设置为
之前,基本上不会实例化选项按钮答案 1 :(得分:1)
我认为您的saveButton
位于R.layout.options
布局中?如果是,则首次创建活动时无法找到,因为您只有R.layout.main
的内容。你应该改为行
SaveButton = (Button)findViewById(R.id.btnSave);
SaveButton.setOnClickListener(this);
将onClickListener
的布局更改为正确的布局后,在setContentLayout()
内的。