如何在按下时将数据从第二个活动传递到第一个活动? - android

kum*_*ded 169 android parent-child pass-data android-activity

我有2个活动,Activity1Activity2.

Activity1我有一个按钮TextView的.单击按钮时,将启动Activity2.

Activity2我的EditText中.

我想显示从检索到的数据的EditText活性2的TextView活性1当从压回活性2.

有人可以帮助我使用代码来完成这项工作吗?

ρяσ*_*я K 305

使用startActivityForResult和使用setResult方法将Activity2从Activity2发送回Activity1.在Activity1中,您需要覆盖onActivityResultTextView使用EditTextActivity2中的数据进行更新.

例如:

Activity1中,启动Activity2为:

Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
Run Code Online (Sandbox Code Playgroud)

Activity2中,setResult用于发回数据:

Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);        
finish();
Run Code Online (Sandbox Code Playgroud)

Activity1中,接收数据onActivityResult:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
         if(resultCode == RESULT_OK) {
             String strEditText = data.getStringExtra("editTextValue");
         }     
    }
} 
Run Code Online (Sandbox Code Playgroud)

如果可以,也可以使用SharedPreferences在活动之间共享数据.

  • @kumareloaded:如果你给我两个类的代码链接与你尝试过使用http://pastebin.com/然后我将编辑你的代码 (2认同)

Swa*_*yam 24

活动1应该开始活性2startActivityForResult().

Activity2应该用于setResult()将数据发送回Activity1.

Activity2中,

@Override
public void onBackPressed() {
    String data = mEditText.getText();
    Intent intent = new Intent();
    intent.putExtra("MyData", data);
    setResult(resultcode, intent);
}
Run Code Online (Sandbox Code Playgroud)

Activity1中,

onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
            String myStr=data.getStringExtra("MyData");
            mTextView.setText(myStr);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Fin*_*ran 16

当我把其他的答案没有工作setResultonBackPressed.评论对super的onBackPressed调用和finish手动调用可以解决问题:

@Override
public void onBackPressed() {
    //super.onBackPressed();
    Intent i = new Intent();
    i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded);
    setResult(RESULT_OK, i);
    finish();
}
Run Code Online (Sandbox Code Playgroud)

在第一项活动中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == QUEUE_MSG) {
        if (resultCode == RESULT_OK) {
            Serializable tmp = data.getSerializableExtra(MainActivity.EXTRA_NON_DOWNLOADED_PAGES);
            if (tmp != null)
                serializable = tmp;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


kat*_*nco 5

可以使用this作为startActivityforResult的替代方法。但是请记住,在这种情况下,这种方法的性能可能会很昂贵,但在某些情况下可能需要使用。

在活动2中,

@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)

在活动1中,

 @Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String  dataFromOtherAct= sp.getString("email", "no email");
} 
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

114892 次

最近记录:

7 年,3 月 前