0

我正在尝试做的可能非常简单,但我遵循了几个不同的说明,似乎无法让它工作。基本上我想做的就是在(main_activity)下的xml布局中创建一个按钮,在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屏幕1

@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屏幕2

<?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屏幕2

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    findViewById(R.layout.buttonone);
}

}
4

3 回答 3

1

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

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

查看此链接以了解 Android 文档的内容。

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

  1. 开始活动 1
  2. (in onCreate())onClickListener设置为按钮
  3. 按钮被按下
  4. onClickListener奔跑,呼唤startActivity()
  5. startActivity()中,系统确保您已在 AndroidManifest.xml 中声明了该活动,如果有,它会启动该活动。
  6. (in onCreate()) call setContentView(),它告诉新活动如何布置自己,并且还使调用findViewById()按您期望的方式工作。
  7. 调用findViewById()以获取对您希望能够操作的视图的引用。
于 2012-12-01T21:23:01.450 回答
0

您的应用程序崩溃了,因为您在调用findViewById(R.layout.buttonone);时没有为您的新 Activity 提供任何东西 - 它找不到 R.layout.buttonone 因为

  • 您尚未设置此 Activity 的布局
  • 您试图找到一个布局文件,它不是视图,而是定义视图排列方式的 xml;视图对象的布局。

这意味着您需要替换findViewById(R.layout.buttonone);setContentView (R.layout.buttonone);

从那里您可以使用findViewById()获取 xml 文件中定义的组件,例如tvButtonOne. 确保您要访问的每个组件都有自己的 id,否则您的应用程序将再次崩溃。

于 2012-12-01T21:16:43.607 回答
0

所以我猜你有两个屏幕(2个活动),当点击按钮时它会启动screen2。那么在 screen2 类上,您没有定义视图。

使用这一行来引用 xml 文件

setContentView(xmlfilenamehere);

这里有一些关于开始第二个活动的信息。

http://developer.android.com/training/basics/firstapp/starting-activity.html

于 2012-12-01T21:18:20.950 回答