Android onActivityResult未获得结果+;模式
从某个Android onActivityResult未获得结果+;模式,android,android-fragments,startactivityforresult,Android,Android Fragments,Startactivityforresult,从某个片段中,我调用一个活动,如下所示: private void setEmailChangeListener() { emailChangeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), EmailCha
片段
中,我调用一个活动
,如下所示:
private void setEmailChangeListener() {
emailChangeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), EmailChangeActivity.class);
startActivityForResult(intent, 1);
}
});
}
// Result From Other Activities
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == 1) {
Log.i("result", "reqCode = 1, zmieniam adres email w nav draw i odswierzam fragment");
navHeaderEmail.setText(db.getEmailAdress());
Fragment fragment = getSupportFragmentManager().findFragmentByTag(
TAG_FRAGMENT_ACCOUNT_SETTINGS);
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransaction.detach(fragment);
fragmentTransaction.attach(fragment);
fragmentTransaction.commit();
showSnackbarInfo(getString(R.string.inf_email_change_success),
R.color.snackbar_success);
}
}
在该活动中
我对数据库中的电子邮件进行了一些更改,然后更新本地数据库中的信息(更新的电子邮件以及更新的时间和日期)。然后我调用setResult
:
if (!error) {
JSONObject user = jObj.getJSONObject("user");
String updatedAt = user.getString("updated_at");
String userUniqueId = db.getUserUniqueId();
db.updateUpdatedAt(updatedAt, userUniqueId);
Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK, returnIntent);
finish();
} else {
String errorMsg = jObj.getString("error_msg");
showSnackbarInfo(errorMsg, R.color.snackbar_error);
}
在打开了片段的活动
中,我想更新片段
中的信息,方法是分离
和附加
,以便重新格式化。我在onActivityResult中这样做:
private void setEmailChangeListener() {
emailChangeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), EmailChangeActivity.class);
startActivityForResult(intent, 1);
}
});
}
// Result From Other Activities
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == 1) {
Log.i("result", "reqCode = 1, zmieniam adres email w nav draw i odswierzam fragment");
navHeaderEmail.setText(db.getEmailAdress());
Fragment fragment = getSupportFragmentManager().findFragmentByTag(
TAG_FRAGMENT_ACCOUNT_SETTINGS);
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransaction.detach(fragment);
fragmentTransaction.attach(fragment);
fragmentTransaction.commit();
showSnackbarInfo(getString(R.string.inf_email_change_success),
R.color.snackbar_success);
}
}
调用setResult
后,没有任何事情发生,就像我没有正确设置结果或其他什么事情一样。你能帮我做这个吗
下面是它应该如何工作的模式:
编辑:
这是我的AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.nazwamarki.myapplication">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:name=".app.AppController"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/application_name"
android:theme="@style/AppTheme">
<!-- Home Activity -->
<activity
android:name=".HomeActivity"
android:label="@string/application_name"
android:theme="@style/AppTheme.Normal">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Login Activity -->
<activity
android:name=".LoginActivity"
android:label="@string/login_activity_name"
android:parentActivityName=".HomeActivity"
android:theme="@style/AppTheme.Logreg">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.nazwamarki.myapplication.HomeActivity" />
</activity>
<!-- Sign Up Activity -->
<activity
android:name=".SignUpActivity"
android:label="@string/register_activity_name"
android:parentActivityName=".HomeActivity"
android:theme="@style/AppTheme.Logreg">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.nazwamarki.myapplication.HomeActivity" />
</activity>
<!-- Email Change Activity -->
<activity
android:name=".EmailChangeActivity"
android:label="@string/change_email_activity_name"
android:theme="@style/AppTheme.Normal">
</activity>
<!-- Password Change Activity -->
<activity
android:name=".PasswordChangeActivity"
android:label="@string/change_password_activity_name"
android:theme="@style/AppTheme.Normal">
</activity>
<!-- Recipe Activity -->
<activity
android:name=".RecipeActivity"
android:label="@string/recipe_activity_name"
android:parentActivityName=".HomeActivity"
android:theme="@style/AppTheme.Normal">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.nazwamarki.myapplication.HomeActivity" />
</activity>
</application>
</manifest>
你能试试吗
getActivity().startActivityForResult(intent, 1);
或者重写它自身片段中的onActivityResult
我遇到了相反的问题,我试图在片段中使用onActivityResult,但有时它会转到父活动,因此我最终使用第一行并在父活动中处理它如何在AndroidManifest.xml中声明您的活动?@Elenasys请检查我编辑的答案:)也许有些想法是因为我有无为什么它不起作用:/它现在工作得很好!感谢您的帮助:)所以您所要做的就是提供getActivity
以获取活动上下文:)