【问题标题】:onActivityResult does not get result ? +schemaonActivityResult 没有得到结果? +模式
【发布时间】:2015-12-11 20:45:37
【问题描述】:

从一些Fragment 我这样称呼Activity

private void setEmailChangeListener() {
    emailChangeButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), EmailChangeActivity.class);
            startActivityForResult(intent, 1);
        }

    });
}

在那Activity 中,我对数据库中的电子邮件进行了一些更改,然后更新了本地数据库中的信息(更新了电子邮件并更新了时间和日期)。然后我打电话给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);
}

Activity 中打开Fragment 我想通过detachattach 更新Fragment 中的信息以刷新它。我在onActivityResult 这样做:

// 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>

【问题讨论】:

  • 如何在您的 AndroidManifest.xml 中声明您的活动?
  • @Elenasys 请检查我的编辑答案:)
  • 也许有些想法,因为我不知道为什么它不起作用:/

标签: android android-fragments startactivityforresult


【解决方案1】:

你可以试试

getActivity().startActivityForResult(intent, 1);

或在它自己的片段中覆盖 onActivityResult

我遇到了相反的问题我试图在我的片段中使用 onActivityResult 但有时它会转到父活动,所以我最终使用第一行并在父活动中处理它

【讨论】:

  • 现在效果很好!谢谢你的帮助:)所以你要做的就是给getActtivity以获取活动上下文:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多