我想要做的事情可能很简单,但我遵循了几个不同的指示,似乎无法让它发挥作用。基本上我只想在xml布局中创建一个按钮(main_activity)在java(MainActivity)中引用它,然后设置该按钮以打开它自己的新xml文件。截至目前,当我点击按钮(在我的手机而不是模拟器上)是崩溃。这就是我到目前为止所拥有的。谢谢你看着它。
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" >
<TextView
android:id="@+id/tvFirst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Application"
android:textSize="30dp" />
<Button
android:id="@+id/b1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tvFirst"
android:layout_centerHorizontal="true"
android:layout_marginTop="46dp"
android:text="1"
android:textSize="30dp" />
</RelativeLayout>
java screen1
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.b1);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, ButtonOne.class);
startActivity(i);
}
});
}
}
xml screen2
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvButtonOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is te button one screen" />
</LinearLayout>
java screen2
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
findViewById(R.layout.buttonone);
}
}
答案 0 :(得分:1)
@javac和@ A-C都是正确的,您需要调用setContentView
,但也请确保您已在AndroidManifest.xml文件中声明了新活动。
<activity
android:name="NAME"
android:label="@string/string_name"/>
查看this link以了解Android文档的内容。
为了帮助您获得更广泛的理解,您尝试做的工作流程将是这样的:
onCreate()
中)onClickListener
设置为按钮onClickListener
正在投放,呼叫startActivity()
startActivity()
中,系统会确保您已在AndroidManifest.xml中声明了活动,如果有,则启动活动。onCreate()
中)致电setContentView()
,告诉新活动如何展示自己,并调用findViewById()
按预期工作。findViewById()
以获取您希望能够操作的视图的引用。答案 1 :(得分:0)
您的应用程序崩溃了,因为您正在调用findViewById(R.layout.buttonone);
而没有为您的新活动提供任何内容 - 它无法找到R.layout.buttonone因为
这意味着您需要将findViewById(R.layout.buttonone);
替换为setContentView (R.layout.buttonone);
从那里,您可以使用findViewById()
来获取xml文件中定义的组件,例如tvButtonOne
。确保您要访问的每个组件都有自己的ID,否则会再次崩溃您的应用程序。
答案 2 :(得分:0)
所以我猜你有两个屏幕(2个活动),点击按钮时会启动screen2。在screen2类上,您没有定义视图。
使用此行引用xml文件
setContentView(xmlfilenamehere);
以下是开始第二项活动的一些信息。
http://developer.android.com/training/basics/firstapp/starting-activity.html