ダイアログから親アクティビティのテキストビューの値を取得する

私は通貨のアプリケーションを作成しようとしています。メインアクティビティにボタンがあり、ボタンをクリックすると、通貨コンバータのようなダイアログボックスが開きます。私の問題は、メインアクティビティから開いたダイアログから、メインアクティビティのテキストビューの価値を得ることができないということです。

これは主なアクティビティからダイアログを開く方法です

 Button calc = (Button) findViewById(R.id.btn_converter);
    calc.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent myIntent = new Intent(MainActivity.this, Calculator.class);
            MainActivity.this.startActivity(myIntent);
        }
    });

これは、私がダイアログからテキストビューの値を読み取ろうとしているところです

Textview t1 = (TextView) findViewById(R.id.txt_cad_alis)

"t1"は常にnullです。私は何を間違えているのですか?

0
最初のコードは主なアクティビティから、2番目のコード(TextView t1 .....)は計算上のアクティビティにあります
追加された 著者 Arif YILMAZ,
あるアクティビティから別のアクティビティにデータにアクセスしようとしていますか?あなたはダイアログを言ったが、新しい活動を開始していることを示すコードから
追加された 著者 Swapnil,
TextViewを取得しようとしている場所の完全なコードを表示します。このコードはCaclulatorアクティビティの中にありますか?
追加された 著者 Plato,
2番目のアクティビティにデータを送信する方法については、下記の回答をお読みください
追加された 著者 Plato,
これを試してみると、t1の値は何ですか: 'Textview t1 =(TextView)MainActivity.this.findViewById(R.id.txt_cad_alis)'
追加された 著者 Alex248,

8 答え

textView をメンバ変数として宣言します(メソッドの外、おそらくクラス宣言の直後です)。

public class MyActivity extends Activity
{
    TextView t1;

    public void onCreate(...)
    {
        ...
        t1 = (TextView) findViewById(R.id.txt_cad_alis);
        ...
    }

then use something like String text = ti.getText().toString() to get the text inside your Dialog

2
追加された

別のアクティビティに属する View にアクセスすることはできません。その代わりに、あなたの活動を始める前に価値を読んで、あなたの第二の活動にそれを送ることです:

Intent myIntent = new Intent(MainActivity.this, Calculator.class);
myIntent.putExtra("value", t1.getText().toString());
MainActivity.this.startActivity(myIntent);

Calculator クラスでは、値を取得するのは簡単です:

protected void onCreate(Bundle savedInstanceState) {
    ...
    String textViewValue = getIntent().getStringExtra("value");
}
1
追加された

別のアクティビティに属する View にアクセスすることはできません。その代わりに、あなたの活動を始める前に価値を読んで、あなたの第二の活動にそれを送ることです:

Intent myIntent = new Intent(MainActivity.this, Calculator.class);
myIntent.putExtra("value", t1.getText().toString());
MainActivity.this.startActivity(myIntent);

Calculator クラスでは、値を取得するのは簡単です:

protected void onCreate(Bundle savedInstanceState) {
    ...
    String textViewValue = getIntent().getStringExtra("value");
}
1
追加された

最初のアクティビティにあるTextview t1にアクセスしようとしていますが、 あなたの第二の活動から。これが常にnullである理由です。

ボタンがクリックされたときにTextViewから値を取得し、それをhteインテントに配置する必要があります。

Button calc = (Button) findViewById(R.id.btn_converter);
calc.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        Textview t1 = (TextView) findViewById(R.id.txt_cad_alis);
        String value = t1.getText().toString();
        Intent myIntent = new Intent(MainActivity.this, Calculator.class);
        intent.putExtra("aKey", value);
        MainActivity.this.startActivity(myIntent);
    }
});

次に、2番目のアクティビティのonCreate()メソッドで、次のような値を取得できます。

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    Intent i = getIntent();
        if (i.hasExtra("aKey")){
             String value = i.getStringExtra("aKey");   
        }
  }
1
追加された
どうもありがとうございました。すべての回答は役に立ちましたが、回答を選択する必要がありました。私はすべてのかなりの答えをupvotedしています。
追加された 著者 Arif YILMAZ,

t1 TextViewのクラス属性を宣言し、MainActivityのonCreate()でその参照を取得します。次に、CalculatorActivityを開始する直前に、t1の値を取得し、それをIntentに渡します。この場合は、「myIntent」を使用します。それが役に立てば幸い。

1
追加された

ここで覚えておくべき重要なことの1つはカプセル化です。ダイアログからMainActivityに属するビューに直接アクセスすべきではありません。これはベストプラクティスとカプセル化の原則に違反するだけでなく、別のコンテキストでダイアログを再利用したい場合にも大きな障害となります。

アイデアは、適切な情報が与えられればどのような状況でも(ダイアログのような)個々のビューを使用できるはずであり、親クラスの特定のフィールドの存在に頼るべきではないということです。

あなたがすべきことは、onClickのテキストフィールドの値を取得し、それをインテントと共にダイアログに渡すことです。

1
追加された

ここで覚えておくべき重要なことの1つはカプセル化です。ダイアログからMainActivityに属するビューに直接アクセスすべきではありません。これはベストプラクティスとカプセル化の原則に違反するだけでなく、別のコンテキストでダイアログを再利用したい場合にも大きな障害となります。

アイデアは、適切な情報が与えられればどのような状況でも(ダイアログのような)個々のビューを使用できるはずであり、親クラスの特定のフィールドの存在に頼るべきではないということです。

あなたがすべきことは、onClickのテキストフィールドの値を取得し、それをインテントと共にダイアログに渡すことです。

1
追加された

考えられる2つの理由:

  1. You are not calling setContentView() in your onCreate(), or you are passing the wrong layout id to setContentView().
  2. txt_cad_alis is not the right id of the textview.
0
追加された