我有以下情况: 我有一个活动(A)调用一个新的活动(B)窗口。所以在活动(B)中我有5个文本字段(文本框)及其名称(5个TextViews),用户必须填写。我想返回上一个活动(A),其中包含填充了textBoxes的名称的字符串(不是文本框中放置的值只是名称)。现在我的问题是如何做到这一点?我知道,对于从活动(B)到活动(A)的数据传递,我必须使用:
Intent resultIntent = new Intent();
// TODO Add extras or a data URI to this intent as appropriate.
setResult(Activity.RESULT_OK, resultIntent);
finish();
并使用以下命令检索活动(A)中的数据:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (MY_CHILD_ACTIVITY) : {
if (resultCode == Activity.RESULT_OK) {
// TODO Extract the data returned from the child Activity.
}
break;
}
}
}
但是我不知道要传递wjat,因为文本框前面的名字没有连接到textBox,所以我怎么知道哪个文本框已被填充以及我应该传回哪个名字?
答案 0 :(得分:0)
你不能说哪个文本域(名称)
的哪个编辑框通讯员你必须自己记住这一点:
如果我有这样的事情:
----------------------------
| Firstname | | [EditBox] |
----------------------------
| Lastname | | [EditBox] |
----------------------------
如果第一个框名为box1
,第二个框box2
,则
我怎么知道box1
是名字而box2
是姓?
现在。
因为你设计了布局,你也知道box1
是名字
因此,如果用户填写了他的姓名,或者即使他没有填写任何内容,然后又回到Activity A
,
您可以将编辑框文本作为附加内容从B添加到A.并且因为您知道editbox1对应的内容,您可以使用您知道的密钥将其传回:
Intent i = new Intent();
i.putExtra("firstname", firstname.getText().toString());
i.putExtra("lastname", lastname.getText().toString());
setResult(Activity.RESULT_OK, i);
finish();
并且在活动结果中获取您刚设置的值,使用:
String first = intent.getExtras().getString("firstname", null);
和姓氏一样
答案 1 :(得分:0)
您可以通过以下方式获取View
的名称:
Resources#getResourceName(int)
或Resources#getResourcesEntryName(int)
getResources().getResourceName(theView.getId());
getResources().getResourceEntryName(theView.getId()));
您可能还想考虑使用setHint(CharSequence)
标记EditText
而不是使用TextView
或者,您可以将TextView
和EditText
分组到布局中:
<LinearLayout android:id="@+id/the_first_name_group">
<TextView android:text="The first name" />
<EditView android:id=@+id/the_first_name_value />
</LinearLayout>
并添加以下代码:
ViewGroup parent = (ViewGroup) theFirstNameValue.getParent();
getResources().getResourceEntryName(parent.getId());
将返回the_first_name_group