这个问题让我苦苦思索了好几天都无济于事。简而言之,我有两个 Activity
,为了示例起见,我将它们称为 MainActivity
和 SearchActivity
。 MainActivity
有一个按钮,可将您带到搜索屏幕,即 SearchActivity
并且我有一个带有预设值的按钮,我想将其传回给 主 Activity
。到目前为止,一切都很好。我单击调试器中的按钮,我可以看到我的额外值,下一个断点位于 MainActivity
的 onCreate 中,当我获得额外值时,什么都没有,没有,都消失了。所以这是重要的部分,代码:
MainActivity.class
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnSearch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent search = new Intent(v.this, SearchActivity.class);
startActivityForResult(search, SEARCH_VIDEO_REQUEST);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SEARCH_VIDEO_REQUEST) {
if (resultCode == RESULT_OK) {
String url = data.getExtras().getString("VIDEO_URL");
if (url != null) {
txtUrl.setText(url);
}
}
}
}
}
SearchActivity.class
public class SearchActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
btnSend.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String videoUrl = "http://video-url.com";
Intent data = new Intent(SearchActivity.this, MainActivity.class);
data.putExtra("VIDEO_URL", videoUrl);
setResult(RESULT_OK, data);
finish();
}
});
}
}
AndroidManifest.xml
<activity
android:name="com.project.MainActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
<data android:scheme="file"/>
</intent-filter>
</activity>
<activity
android:name="com.project.SearchActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="portrait">
</activity>
最佳答案
问题在于返回结果的类。
正如 Mikel 在另一个回答中指出的那样:
Intent(Context packageContext, Class cls) 在 API 级别 1 中添加
Create an intent for a specific component. All other fields (action, data, type, class) are null, though they can be modified later with explicit calls. This provides a convenient way to create an intent that is intended to execute a hard-coded class name, rather than relying on the system to find an appropriate class for you; see setComponent(ComponentName) for more information on the repercussions of this.
您并未如上述文档所述明确设置数据参数,而是试图将 Extra 添加到失败的空数据对象。
相反,我会将您的类(class)更改为以下内容:
public class SearchActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
btnSend.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String videoUrl = "http://video-url.com";
Intent data = new Intent();
data.putExtra("VIDEO_URL", videoUrl);
setResult(RESULT_OK, data);
finish();
}
});
}
}
这将初始化您的 Intent 并允许您向其添加额外数据(这也是您发回数据的正常方式,通常不需要发回与特定 Intent 相关的结果。
关于android - 传递给主要 Activity 的数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688272/