3

一部のデータを別のアプリケーション コンポーネントに運ぶインテントが必要な場合は、そのインテントのエクストラを使用します。インテントは、単なるキーと値のペアです。最初にキーを公開定数として定義し、それに値を与えます。例えば

public static final String extra_key = "com.example.myapp.MESSAGE";

また、インテントによって運ばれる必要があるデータにキーを割り当てる必要があります。例えば

String extra_value = editText.getText().toString();

次に、次のようなインテントを追加します。

intent.putExtra(extra_key, extra_value);

私の質問:

  1. 鍵を公開する必要があるのはなぜですか?

  2. そもそもキーを初期化する必要があるのはなぜですか。キーを宣言するだけでいいわけではありません。いずれにせよ値 (インテントによって運ばれるデータ) が割り当てられるからです。では、なぜ次のようなことができなかったのでしょうかpublic static final String extra_key;

  3. 他のパッケージが突っ込んだ場合に一意になるように、キー値に逆ドメイン名を含める必要があることを読みました。意図によって運ばれます。

前もって感謝します。

4

4 に答える 4

4

Why does the key have to be public?

そうではありません。これは、インテント エクストラやキーと値のペアに関する質問ではありません。これは単に Java 変数のスコープと可視性に関する問題です。

呼び出しクラスで:

intent.putExtra("KEY_NAME", "Key_Value");

受信側コンポーネント:

intent.getStringExtra("KEY_NAME");

これはうまくいきます。 送信者と受信者が同じ定数名を使用できるようにすることをお勧めしますpublic final static

Why do we need to intialize the key in the first place, why can't we just declare it, because it will be assigned a value (the data to be carried by the intent) anyway. So why couldn't we do something like

上記を参照。キー名は単なる文字列です。キーはデータを運ぶのではなく、値はデータを運びます。

I have read that the key value should include the reverse domain name.

これは意味がありません。キー値は、送信者が受信者に送信したいデータです。それともキー名のことですか?キーの名前は受信者が認識している必要があるため、この目的が外部コンポーネントを開始することである場合は、受信者によって定義されたキー名を使用する必要があります。意図が内部コンポーネント用である場合は、名前を任意の名前に定義します。パッケージ名を含める正当な理由がわかりません。より多くのメモリを使用するだけです。

于 2013-11-03T11:48:46.967 に答える
1

キーは、値の保存と取得に使用されます。HashMap のキーのように考えることができます。

  1. 複数の場所で同じキーを再利用したい場合があるため (たとえば、アクティビティに値を保存し、別のアクティビティで値を取得するなど)
  2. static としてメンバーにする場合、それはオブジェクトの特定のインスタンスに属していないことを意味しますが、そのクラスのすべてのオブジェクトはそれを共有します。static キーワードを削除すると、コンストラクター内で変数を初期化できますが、この場合、変数はオブジェクト インスタンスに属し、定数ではありません。

説明が必要な場合は、お気軽にお尋ねください

于 2013-11-03T11:46:17.377 に答える
0
  1. 鍵を公開する必要があるのはなぜですか?

おそらく、別のクラスでキーを使用して値を取得し、静的でパブリックにする必要があります。

他の活動では

   String s = getIntent().getStringExtra(MainActivity.extra_value);
   // considering extra_value is static in MainActivity 

そのようにする必要はありません。

 intent.putExtra("mykey", extra_value);

次に、他のアクティビティで取得します

  String s = getIntent().getStringExtra("mykey");  // keys must match

変数extra_keyは文字列として宣言され、初期化され、静的です。

static 修飾子は、final 修飾子と組み合わせて、定数の定義にも使用されます。final 修飾子は、このフィールドの値が変更できないことを示します。

この方法で定義された定数を再割り当てすることはできず、プログラムが再割り当てを試みると、コンパイル エラーが発生します。

トピック定数を確認してください。

public static final String extra_key= "com.example.myapp.MESSAGE";

Java: 初期化、宣言、代入という用語を定義します

http://developer.android.com/reference/android/content/Intent.html

于 2013-11-03T11:47:17.797 に答える
0

コメントでわかるように、キー識別子のようにそのパッケージ名を追加したいだけですが、必須ではありませんが、むしろ良い習慣です。

これによるとhttps://developer.android.com/training/basics/firstapp/starting-activity.html#BuildIntent

于 2016-12-09T19:43:37.703 に答える