使用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); 
      } 
     }); 
    } 
+1

您更新的问题是不同的。在'startActivityForResult()' – ataulm 2014-09-04 14:13:54

+0

上查找用法以确认:活动A开始活动B.用户在活动B中输入信息,然后单击完成(关闭活动B,并显示活动A,该活动在后台打开)。该信息应该返回到活动A,然后通过额外的方式将信息传递给活动C. – ataulm 2014-09-04 14:15:23

+0

这正是我想要做的。谢谢 – hozdaman 2014-09-04 14:17:47

如果我没有理解错误,问题是要显示易名内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 
    } 
+0

我更新了我的问题,以帮助澄清我的问题。谢谢。 – hozdaman 2014-09-04 14:11:27

+0

谢谢你的回答,这很有道理。我更新了我的代码,但我想我不理解如何将其转换为代码。我添加了我尝试的内容(不完整),但不确定接下来要做什么。任何额外的帮助或样品都会很棒。谢谢。 – hozdaman 2014-09-04 15:22:11

+0

我更新了我的答案 – Blackbelt 2014-09-04 15:31:04

试试这种方式,希望这会帮助你解决你的问题。

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