0

私のプロジェクトでは、ActivityTwo は ActivityOne のサブアクティビティとして起動され、ActivityTwo から返されたデータを処理するように変更されています。

ActivityOne の TextView は、インテント オブジェクトに追加された EditText に入力されたテキストを、ActivityTwo のキー値として取得する必要があります。起動に成功しても、インテント オブジェクトは抽出されません。

私は直面している可能性のある同様の問題を調べて、これを経験しました: Android で `startActivityForResult` を管理するにはどうすればよいですか?

それでも、TextView が 2 番目のアクティビティから取得したインテント オブジェクトから抽出されたテキストを設定できない理由をまだ理解できませんでした。

有用なヘルプをいただければ幸いです。

以下にコードを示します。

アクティビティワン:

public class ActivityOne extends AppCompatActivity {
    private static final int REQUEST_CODE = 1;
    EditText isimAlani, soyadiAlani;
    TextView tlfNo;
    Button btnIleri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);

        isimAlani = (EditText) findViewById(R.id.isimalani);
        soyadiAlani = (EditText) findViewById(R.id.soyadialani);
        tlfNo = (TextView) findViewById(R.id.tlfno);
        btnIleri = (Button) findViewById(R.id.btnileri);

        btnIleri.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(ActivityOne.this, ActivityTwo.class);
                i.putExtra("isim", isimAlani.getText().toString());
                i.putExtra("soyisim", soyadiAlani.getText().toString());
                startActivityForResult(i, REQUEST_CODE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);        
        if ((requestCode == REQUEST_CODE) && (requestCode == RESULT_OK)) {
            String result = data.getExtras().getString("returnData");
            tlfNo.setText("Telefon numaranız: " + result);
        }
    }
}

アクティビティ 2 :

public class ActivityTwo extends AppCompatActivity {
    EditText tlfNoAlani;
    TextView tvAdSoyad;
    Button btnGeri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);

        tlfNoAlani = (EditText) findViewById(R.id.tlfnoalani);
        tvAdSoyad = (TextView) findViewById(R.id.tvadsoyad);
        btnGeri = (Button) findViewById(R.id.btngeri);

        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            tvAdSoyad.setText("Merhaba " + extras.getString("isim") + " " + extras.getString("soyisim"));
        }

        btnGeri.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent data = new Intent();
                String returnString = tlfNoAlani.getText().toString();
                data.putExtra("returnData", returnString);
                setResult(RESULT_OK, data);
                finish();
            }
        });
    }
}
4

2 に答える 2

1

Pavel が示唆したように、間違いは onActivityResult() メソッドにありました。

そこで、ActivityOne ソース ファイルに次の変更を加えました。

requestCode の 1 つを resultCode に置き換えただけで、機能するようになりました。

彼にもう一度感謝します

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if ((requestCode == REQUEST_CODE) && (resultCode == RESULT_OK)) {
        String result = data.getExtras().getString("returnData");
        tlfNo.setText("Telefon numaranız: " + result);
    }
}
于 2016-05-06T17:32:49.717 に答える