将整个包(对象)本身从一些 activity 的片段传递和接收到另一个 activity

Passing and receiving an entire bundle(object) itself from fragment of some activity to another activity

我正在开发一个 android 应用程序,我在 Activity class(仪表板 Activity)中从 firebase 获取所有用户数据,然后使用 Bundle 所有用户数据都被存储并传输到 Dashboard Activity 的片段之一,具体取决于用户是管理员还是员工。

现在的情况是..在那个片段中我没有解包包(即我没有创建单独的字符串变量来保存它从其父级接收的每个值, 仪表板 Activity) 而不是那个片段我想进一步发送这个数据(bundle对象)到另一个activity(AccountInfo Activity),这就是我所在的地方应该从包中提取值)。有人可以告诉我如何将该捆绑对象发送到 AccountInfo Activity,然后我如何在其他活动中从该捆绑对象获取值。 上一个问题有几个类似的问题,但其中 none 恰好指出了我的问题。有人可以帮忙吗?也许我只遗漏了一点点。

我这样做是为了发送包裹:

//FRAGMENT under DASHBOARD ACTIVTY

public class DshAdminFragment extends Fragment implements View.OnClickListener {

    private final static String TAG= "admin-fragment";
    CardView cvProfile, cvMngEmployee, cvReport;
    Bundle bundle, data;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Here it gets the bundle object from its parent the DASHBOARD ACTIVTY
        bundle = this.getArguments();

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_dsh_admin, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        cvProfile = view.findViewById(R.id.crd_profile);
        cvMngEmployee = view.findViewById(R.id.crd_mng_employee);
        cvReport = view.findViewById(R.id.crd_emp_att_report);

        cvProfile.setOnClickListener(this);
        cvMngEmployee.setOnClickListener(this);
        cvReport.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {

        if (v.getId() == R.id.crd_profile) {

            Intent intent = new Intent(getContext(), AccountInfoActivity.class);
            intent.putExtra("bundle", bundle);
            startActivity(intent);

        }
    }
}

现在,这就是我接收它的方式,但我不知道如何从中获取值,例如从 Dashoabord Activity 发送的名称、电子邮件等作为捆绑到其片段并从那里发送到此 AccountInfo Activity.

//ACCOUNT INFO Activity
public class AccountInfoActivity extends AppCompatActivity {

    private static final String TAG = "acc-info-activity";
    Bundle bundle;
    String name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_account_info);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        try {
            Bundle bundle = getIntent().getExtras();
            if(bundle != null){
                //name= bundle.getString("bundle");
            }
            Log.e(TAG, String.valueOf(bundle));


        } catch (Exception e) {
            Log.e(TAG, "An error occured.." + " " + e);
        }
    }
}

我看到你已经收到了你的仪表板 activity 的捆绑包到片段 bundle = this.getArguments();

从这里您已将此捆绑包分享给您的另一个 activity:- intent.putExtra("bundle", bundle);.

你可以简单地使用(如果你没有在片段中的其他任何地方使用你的包,否则 bundle() 也可以代替 this.getArguments()

而不是这个
if (this.getArguments != null) {
    intent.putExtras(this.getArguments())
}

请注意使用 intent.putExtras 而不是 intent.putExtra

所以现在在您的控制面板中 Activity 您将使用这个获得捆绑包 :-

Bundle extrasBundle = getIntent().getExtras()

现在您可以使用 extrasBundle.getString("YOUR_KEY");

从这个 extrasBundle 中提取所有数据