2

私は Android の開発を始めたばかりで、これを手伝ってくれると確信しています (下手な英語で申し訳ありません)。

メインのアクティビティがあり、特定の瞬間に別のアクティビティを呼び出したいと思っています。その中で、テキストビューをメッセージで変更したいと考えています。setContentView(R.layout.register); を置かないと、この時点で Null ポインター例外が発生します。

しかし、その行を入れると、新しいテキスト「Android2」を含む登録アクティビティがミリ秒正しく表示され、テキストのない登録アクティビティに再びジャンプします。つまり2回描く。十分に説明できたことを願っています。

問題は、setcontentview をどこに配置し、どのレイアウトで配置する必要があるかです。

どうもありがとう、ダニエル

コードをいくつか示します。

私の主な活動にはこの方法があります:

  protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {

        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
        {
            Intent i = new Intent(this, register.class);
            startActivity(i);       

            setContentView(R.layout.register);
            TextView text = (TextView) findViewById(R.id.texto);

            try {
                text.setText("Android2");
                }catch(Exception e) {
                    Log.i("Log", e.getMessage()+"Error!"); // LogCat message
                }
        }
        //super.onActivityResult(requestCode, resultCode, data);
    }

register と呼ばれる 2 番目のアクティビティ クラス:

public class register extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.register);
   }
}

register インターフェイスは register.xml です。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/about_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/register" />

    <TextView
        android:id="@+id/texto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/continue_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/save" />

        <Button
            android:id="@+id/new_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/repeat" />
    </LinearLayout>

</LinearLayout>
4

3 に答える 3

4

基本的に行うことは次のとおりです。

  1. あなたは別の活動を開始する意図を準備します
  2. インテントを準備したアクティビティを開始する
  3. 現在のアクティビティのコンテンツを R.layout.register に設定します
  4. textView を取得します(現在のアクティビティで)
  5. textView のテキストを Android2 に設定します

そして、この瞬間、新しいアクティビティが画面に表示されます。現在のアクティビティで UI 要素を操作し、新しく開始されたアクティビティで変更が予想されるため、コードが正しくないことに注意してください。

このコードを移動

TextView text = (TextView) findViewById(R.id.texto);

try {
    text.setText("Android2");
}catch(Exception e) {
    Log.i("Log", e.getMessage()+"Error!"); // LogCat message
}

register アクティビティの onCreate() メソッドに。

ところで、通常、クラスを作成するとき、その名前は標準に従って大文字で始まる必要があります。

于 2012-04-22T09:27:06.807 に答える
1

2 つの異なるアクティビティがあります。1 つは register.xml ビューを使用しており、もう 1 つは register ビューにアクセスしようとしています。ビューは"register"アクティビティにのみ存在します。他のアクティビティは見えないようですか?それがおそらくあなたが得ている理由ですNULL

texto同じビューからアクセスしようとしているように見えるため、これら 2 つのクラスを一緒にマージする必要があります。

したがって、要約すると、findViewByIdを呼び出すアクティビティ内から呼び出す必要がありますsetContentView

于 2012-04-22T08:35:56.593 に答える
0

この行を削除すると、機能するはずです

   startActivity(i); 

なぜそれを外部活動と呼んでいるのかわからない。

それ以外の場合は、以下のコードをレジスタクラスに移動します

setContentView(R.layout.register);
        TextView text = (TextView) findViewById(R.id.texto);

        try {
            text.setText("Android2");
            }catch(Exception e) {
                Log.i("Log", e.getMessage()+"Error!"); // LogCat message
            }
    }
于 2012-04-22T08:38:57.967 に答える