0

私がやろうとしていることはおそらく本当に単純ですが、いくつかの異なる指示に従ったので、うまくいかないようです。基本的に私がやりたいことは、(main_activity)の下のxmlレイアウトでボタンを作成し、Java(MainActivity)でそれを参照し、そのボタンを設定して独自の新しいxmlファイルを開くことです。今のところ、ボタンをクリックすると(エミュレーターではなく携帯電話で)クラッシュします。これは私がこれまでに持っているものです。ご覧いただきありがとうございます。

xml スクリーン 1

<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>

ジャワスクリーン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>

ジャワスクリーン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

したがって、2 つの画面 (2 つのアクティビティ) があり、ボタンをクリックすると screen2 が起動すると思います。screen2 クラスでは、ビューが定義されていません。

この行を使用して、xml ファイルを参照します

setContentView(xmlfilenamehere);

そして、ここに 2 番目の活動を開始するための情報があります。

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

于 2012-12-01T21:18:20.950 に答える
0

新しいアクティビティが動作するように何も指定せずに呼び出しているため、アプリがクラッシュしてfindViewById(R.layout.buttonone);います-R.layout.buttononeが見つからないためです

  • このアクティビティのレイアウトを設定していません
  • ビューではなく、ビューの配置方法を定義するxmlであるレイアウトファイルを見つけようとしています。ビュー オブジェクトのレイアウト。

これが意味することは、次のものに置き換える必要があるということfindViewById(R.layout.buttonone);ですsetContentView (R.layout.buttonone);

そこから、.xml などの xml ファイルで定義されたコンポーネントfindViewById()を取得するために使用できます。アクセスする各コンポーネントに独自の ID があることを確認してください。そうしないと、アプリが再びクラッシュします。tvButtonOne

于 2012-12-01T21:16:43.607 に答える