如何从 activity 调用片段。当视图不属于相应布局时

How to call a Fragment from activity. When the view doesn't belong to corresponding layout

在我的场景中,我有一个片段,其中有用户可以 select 的选项列表(Recycler 视图)。 示例:我的个人资料、更改密码、注销。

如果用户从 Fragment A 回收器视图适配器 中单击更改密码,则用户将导航到 Activity A.用户可以在哪里更改密码。单击 Activity A 中的提交按钮后,用户应导航至 片段 A.

代码在ActivityA

package com.example.expresso.sapthagiri.yogirproduct;

import android.content.Intent;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class ChangePassword extends AppCompatActivity {

    Button submit, back;
    EditText old_password, new_password, re_enter_password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_change_password);

        submit = findViewById(R.id.submit);
        back = findViewById(R.id.backButton);
        old_password = findViewById(R.id.oldPassword);
        new_password = findViewById(R.id.newPassword);
        re_enter_password = findViewById(R.id.reEnterPassword);

        final ProfileFragment profileFragment = new ProfileFragment();

        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setFragment(profileFragment);
            }
        });

        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setFragment(profileFragment);
            }
        });

    }

    private void setFragment(android.support.v4.app.Fragment fragment) {
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.main_frame, fragment).commit();
    }
}

目前的实际问题:我正在尝试加载片段 A,但 R.id.main_frame 不属于 setContentView(R.layout.activity_change_password);.

private void setFragment(android.support.v4.app.Fragment fragment) {
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.main_frame, fragment).commit();
    }

请帮我解决问题。提前万分感谢! :)

您混淆了 android 的导航架构。当您启动 Activity A 时,它会将 Activity A 添加到 activity 堆栈。因此,带有片段 A 的 Activity 仍在该活动堆栈中。所以你所要做的就是完成 activity A。这基本上会在 activity 堆栈上执行弹出操作。

    back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed(); //or finish()
        }
    });

这样就可以了。