【发布时间】:2011-07-14 14:11:42
【问题描述】:
想不出来这个。完成研究,在这里搜索,在线等。仍然是 Java/Android 的新程序员,但似乎我做得对,所以就这样吧。
我的主要活动基于触摸的菜单条目启动了几个子活动。对于其中的每一个,我将一个带有一些“额外”字符串数据的包传递给子活动。每个子活动检索数据,进行一些处理,然后使用 .putExtra() 将新/更改的数据放回包中,并使用 finish() 退出子活动。
这在除一个子活动之外的所有子活动中都可以正常工作。在这一个子活动中,当我返回 onActivityResult 时,intent 对象为 NULL 而不是“具有附加功能”。我已经尝试了很多东西,但我就是无法让它工作。下面是一些骨架代码,希望能帮助证明这一点:
在父activity中,onOptionItemsSelected的一部分,子activity被启动:
case R.id.read_file:
Intent intentR = new Intent(this, GetReadFileName.class);
intentR.putExtra(GetReadFileName.EXTRA_WHATEVER, baseDirectory);
startActivityForResult(intentR, REQUEST_READ_FILE_NAME);
return true;
case R.id.write_file:
Intent intentW = new Intent(this, GetWriteFileName.class);
intentW.putExtra(GetWriteFileName.EXTRA_FILE_NAME, fileName);
startActivityForResult(intentW, REQUEST_WRITE_FILE_NAME);
return true;
子活动GetWriteFileName:
public class GetWriteFileName extends Activity{
String fileName;
public static String EXTRA_FILE_NAME = "file_name";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wfn);
fileName = getIntent().getExtras().getString(EXTRA_FILE_NAME);
// fileName is PROPERLY received from parent. No issues here.
.
. do processing
.
Intent intent = new Intent();
intent.putExtra(EXTRA_FILE_NAME, fileName); // put changed/modified name in bundle for parent
setResult(Activity.RESULT_OK, intent);
finish();
子活动GetReadFileName:
public class GetReadFileName extends Activity {
/** Called when the activity is first created. */
public static String EXTRA_WHATEVER = "whatever";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String extStorageDir = Environment.getExternalStorageDirectory().toString() + getIntent().getExtras().getString(EXTRA_WHATEVER);
// extStorageDir is PROPERLY retrieved from parent. No issue here.
.
. do processing
.
Intent intent = new Intent();
intent.putExtra(EXTRA_WHATEVER, "Just a damn string"); // Stuff to pass back OUT to parent
// Note: doesn't matter if I have a literal, String variable, or anything else here. End result is the same.
setResult(Activity.RESULT_OK);
finish();
最后,在 onActivityResult 中:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_WRITE_FILE_NAME:
if (resultCode == Activity.RESULT_OK) {
fileName = data.getExtras().getString(GetWriteFileName.EXTRA_FILE_NAME);
}
break;
case REQUEST_READ_FILE_NAME:
if (resultCode == Activity.RESULT_OK) {
fileName = data.getExtras().getString(GetReadFileName.EXTRA_WHATEVER);
}
break;
我希望你会原谅省略右括号等。
问题是,当GetWriteFileName返回父Intent data时,在调试器中显示为“has extras”,并且可以检索到字符串。
当 GetReadFileName 返回父 Intent 数据 为 NULL 时,这就是问题所在。为什么它是空的?从我的角度来看,我在这两项活动中都在做同样的事情,以将东西返还给父母。我的 Android Manifest 文件包含我认为应该包含的内容。关键字段似乎正确。我被困在这里。想法?
清单文件部分:
<activity android:name=".DeviceListActivity"
android:label="@string/select_device"
android:theme="@android:style/Theme.Dialog"
android:configChanges="orientation|keyboardHidden" />
<activity android:name=".GetWriteFileName"
android:theme="@android:style/Theme.Dialog"
android:configChanges="orientation|keyboardHidden" />
<activity android:name=".GetReadFileName"
android:theme="@android:style/Theme.Dialog"
android:label="@string/select_file"
android:configChanges="orientation|keyboardHidden" />
/>
感谢您阅读所有这些内容。
【问题讨论】:
标签: android android-intent subactivity