通过构造函数将对象传递给多个片段是一种不好的做法吗?

Is passing an object through constructors, to multiple fragments a bad practice?

在我的应用程序中,我有一个 activity,它有一个使用 OrderItems

列表的 RecyclerView 适配器

当用户点击一个项目时,我将对象从我的 RecyclerAdapter 传递到我的 MainActivity 以膨胀 BottomSheetDialog

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        . . .

        int position;

        ViewHolder(@NonNull View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {

            . . .

            adapterCallback.onOrderItemClick(orderItem);
        }
    }

public interface OrdersAdapterCallback {
        void onOrderItemClick(OrderItem orderItem);
}

在我的 MainActivity 中实现的接口回调方法中,我使用适配器中的对象(第一次传递对象)对 BottomSheetDialog 进行充气

MainActivity

@Override
    public void onOrderItemClick(OrderItem orderItem) {
        //Object passed from adapter
        BottomSheetDialogFragment dialogFragment = BottomSheetOrderFragment.newInstance(orderItem);
        dialogFragment.show(getSupportFragmentManager(), Constants.FRAGMENT_BOTTOMSHEET_ORDER);
    }

BottomSheetDialog 膨胀时,有一个按钮可以关闭当前对话框,并膨胀 FragmentDialog 通过 OrderItem (但在使用一些设置器之后)再次对象(第二次传递对象)。

Inside the BottomSheetDialog:

private BottomSheetOrderFragment(OrderItem orderItem){
        this.orderItem = orderItem;
        this.orderItem.setNewOrder("New order string here");
}

@OnClick(R.id.btn_edit_order)
    void onEditOrderBtnClick(){
    dismiss();
    mainActivity.editOrder(this.orderItem);
}

所以目前我们已经将 OrderItem 对象传递给 MainActivity 中的两个不同片段。然后我必须将该对象传递给 MainViewModel,然后传递给 MainRepo,其中 RoomDatabase class 将该对象插入本地数据库。

这最终让 OrderItem 通过它们的构造函数传递给 4 个不同的 classes,并在途中将一些 setter 应用于该对象。我的问题是,这在 Android / OOP 中通常是一种不好的做法吗?还是有更好的方法来实现我想要实现的目标?

My question is, is this a bad practice in Android / OOP in general?

是的。

Or is there a better way of doing what I'm trying to achieve?

可能。

什么很难说,因为还不完全清楚您要实现的目标以及此代码的结构。

但我建议您查看 this documentation on sharing data between fragments。考虑到这一点,考虑将此 OrderItem 对象保留在 一个 位置 - ViewModel - 然后从每个 Fragment 或访问一个共享视图模型Activity 需要在订单项上使用 /。

这不是一个坏的做法,但是一个好的做法是使用共享视图模型,片段可以从中访问他们需要的数据