Android开发 - 让按钮打开新屏幕

时间:2012-12-01 21:10:07

标签: android

我想要做的事情可能很简单,但我遵循了几个不同的指示,似乎无法让它发挥作用。基本上我只想在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);
}

}

3 个答案:

答案 0 :(得分:1)

@javac和@ A-C都是正确的,您需要调用setContentView,但也请确保您已在AndroidManifest.xml文件中声明了新活动。

<activity
android:name="NAME"
android:label="@string/string_name"/>

查看this link以了解Android文档的内容。

为了帮助您获得更广泛的理解,您尝试做的工作流程将是这样的:

  1. 开始活动1
  2. (在onCreate()中)onClickListener设置为按钮
  3. 按钮被按下
  4. onClickListener正在投放,呼叫startActivity()
  5. startActivity()中,系统会确保您已在AndroidManifest.xml中声明了活动,如果有,则启动活动。
  6. (在onCreate()中)致电setContentView(),告诉新活动如何展示自己,并调用findViewById()按预期工作。
  7. 调用findViewById()以获取您希望能够操作的视图的引用。

答案 1 :(得分:0)

您的应用程序崩溃了,因为您正在调用findViewById(R.layout.buttonone);而没有为您的新活动提供任何内容 - 它无法找到R.layout.buttonone因为

  • 您尚未设置此活动的布局
  • 您正在尝试查找一个不是视图的布局文件,而是一个定义视图排列方式的xml; View Objects的布局。

这意味着您需要将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