使用Extra将数据传递给Android中的其他活动
我不知道这是否可行。我拥有的是一个有多个按钮的活动。每个按钮都会将用户带到一个新的活动,在该活动中用户输入一些数据(即firstName)和完成按钮,然后返回主活动。我还有一个汇总按钮,可以显示从各个按钮输入的所有内容。我知道如何将数据传递给新的活动,但有没有办法将数据传递到第三个活动?使用Extra将数据传递给Android中的其他活动
**让我看看我能否更好地澄清我的问题。我有3项活动(A,B,C)。活动A是我的主要活动,从A我想去活动B并添加一些数据(如名称)。然后在活动B中,当我点击“完成”按钮时,我会返回到活动A.在活动A中,我点击“摘要”按钮并转到活动C.在活动CI中应该看到一个带有我在活动B中放置的信息的文本视图。 *
任何帮助或方向将真的有所帮助。谢谢。 这就是我有两个活动之间传递数据时,作为一个开始:
这个按钮带你到一个页面中输入一个名称
//button to display event name
mEventNameButton = (Button) findViewById(R.id.eventNameButton);
mEventNameButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(EventDetails.this, EventName.class);
startActivity(i);
}
});
在事件名称活动(1)这里是代码我有一个与额外的完成按钮:
mEventNameDoneButton = (Button)findViewById(R.id.eventNameDoneButton);
mEventNameDoneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(EventName.this, EventDetails.class);
i.putExtra("eName", mEventNameEditText.getText().toString());
startActivity(i);
}
});
这里是在EventDetails活动(2日)在总结
按钮终于在EventSummary活动(第3)中显示额外的代码。
mResultEventName = (TextView)findViewById(R.id.resultEventName);
Intent i = getIntent();
String eName =i.getStringExtra("eName");
//display info
mResultEventName.setText("Event name has been set: " + eName);
}
什么,我得到的是 “事件名称已被设置为空”
**编辑** 这是我尝试,但不理解如何使用onActivityResult的活动Ç 。 更新的代码:活动A
//button to display event name
mEventNameButton = (Button) findViewById(R.id.eventNameButton);
mEventNameButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(EventDetails.this, EventName.class);
startActivityForResult(i, 1);
}
});
//button to display event summary
mEventSummaryButton = (Button)findViewById(R.id.eventSummaryButton);
mEventSummaryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(EventDetails.this, EventSummary.class);
startActivity(i);
}
});
}
@Override
protected void onActivityResult(int RequestCode, int resultCode, Intent data){
if (data == 1)
{
return;
}
}
}
Actvity B码:
//done button to go back to event details
mEventNameDoneButton = (Button)findViewById(R.id.eventNameDoneButton);
mEventNameDoneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(EventName.this, EventSummary.class);
i.putExtra("eName", mEventNameEditText.getText().toString());
setResult(RESULT_OK, i);
finish();
startActivity(i);
}
});
编辑为onActivityResult:
@Override
protected void onActivityResult(int RequestCode, int resultCode, Intent data){
if (data != null)
{
final String eventName = data.getStringExtra("ename");
//button to display event summary
mEventSummaryButton = (Button)findViewById(R.id.eventSummaryButton);
mEventSummaryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(EventDetails.this, EventSummary.class);
i.putExtra("ename", eventName.toString());
startActivity(i);
}
});
}
如果我没有理解错误,问题是要显示易名内EventSummary
,它是由EventDetails
开始,但字符串属于开始的意图EventDetails
。我认为你错过了什么,不知何故,
Intent i = new Intent(EventDetails.this, EventSummary.class);
i.putExtra("eName", getIntent().getStringExtra("eName"));
startActivity(i);
编辑
我看了你的更新,它实际上会改变你的问题。我想你可以用startActivityForResult
从A开始B,为了提供你想传递的信息C.为此,你必须在A内实现onActivityResult
。当你为B做了,呼吁
setResult(int, Intent);
finish();
上B. A的onActivityResult
将被调用,并且其第三个参数里面,您提供给setResult
的目的相同,您可以提取您需要提供到C
EDIT2:在onClickListner内 代码应该是这样的:
mEventNameDoneButton = (Button)findViewById(R.id.eventNameDoneButton);
mEventNameDoneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("eName", mEventNameEditText.getText().toString());
setResult(RESULT_OK, i);
finish();
}
});
在Actvity答:
@Override
protected void onActivityResult(int RequestCode, int resultCode, Intent data){
if (data != null)
{
// get eName from data
// create the new intent to start C
// add eName
// start C
}
试试这种方式,希望这会帮助你解决你的问题。
mResultEventName = (TextView)findViewById(R.id.resultEventName);
Intent i = getIntent().getExtras();
String eName =i.getString("eName");
//display info
mResultEventName.setText("Event name has been set: " + eName);
}
您更新的问题是不同的。在'startActivityForResult()' – ataulm 2014-09-04 14:13:54
上查找用法以确认:活动A开始活动B.用户在活动B中输入信息,然后单击完成(关闭活动B,并显示活动A,该活动在后台打开)。该信息应该返回到活动A,然后通过额外的方式将信息传递给活动C. – ataulm 2014-09-04 14:15:23
这正是我想要做的。谢谢 – hozdaman 2014-09-04 14:17:47