【问题标题】:Cant Return Data From a Sub-Activity (setResult)无法从子活动返回数据 (setResult)
【发布时间】:2016-05-06 16:43:19
【问题描述】:

在我的项目中,ActivityTwo 是作为 ActivityOne 的子活动启动的,而 ActivityOne 又经过修改以处理从 ActivityTwo 返回的数据。

ActivityOne 中的TextView 应该检索输入到添加到意图对象的EditText 中的文本作为ActivityTwo 中的键值。 尽管启动成功,但它并没有提取意图对象。

我查看了可能面临的类似问题并解决了这个问题: How to manage `startActivityForResult` on Android?

然而,我仍然无法弄清楚为什么我的 TextView 无法设置从第二个活动中检索到的意图对象中提取的文本。

任何有用的帮助表示赞赏。

提前致谢 下面你可以看到代码:

ActivityOne

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);
        }
    }
}

ActivityTwo

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();
            }
        });
    }
}

【问题讨论】:

    标签: android android-intent startactivityforresult subactivity


    【解决方案1】:

    会不会是您的ActivityOne.onActivityResult() 代码中有错字?

    您似乎在检查 requestCode 是否等于两个可能不同的值 REQUEST_CODERESULT_OK

    【讨论】:

      【解决方案2】:

      正如 Pavel 所说,错误出在 onActivityResult() 方法中。

      所以我在 ActivityOne 源文件中做了以下更改。

      我只是用 resultCode 替换了其中一个 requestCode,现在它可以工作了!

      再次感谢他

       @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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多