無法找出這一個。完成的研究,在這裏搜索,在線等等。仍然是Java/Android的新程序員,但看起來我正在做這件事,所以在這裏。Android:Subactivity在onActivityResult中返回NULL意圖對象
我的主要活動根據所觸及的菜單條目開始幾個子活動。對於每一個我用一些「額外」字符串數據將一個包傳遞給子活動。每個子活動檢索數據,進行一些處理,然後使用.putExtra()將新的/更改的數據重新放入一個包中,並使用finish()退出子活動。
這是工作正常,但其中一個子活動。在這一個子活動中,當我返回到onActivityResult時,意圖對象是NULL而不是「有額外」。我嘗試了很多東西,但我無法完成它的工作。下面是一些框架代碼,我希望這將有助於證明了這一點:
在父活動,onOptionItemsSelected的一部分,子活動啓動:
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();
最後,在onActivit yResult:
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在調試器返回到父意向數據顯示爲「有額外「和字符串可以被檢索。
當GetReadFileName返回到父意圖數據是NULL,這就是問題所在。爲什麼它是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" />
/>
感謝您在閱讀這些文檔。
哦兄弟。謝謝!而已。我怎麼會錯過?再次感謝。 –
完全沒問題。 –