如何将数据从活动传递到BottomSheet片段?

时间:2019-07-11 13:42:43

标签: android kotlin

我对BottomSheet中片段的使用感到困惑。我使用了本教程:https://blog.mindorks.com/android-bottomsheet-in-kotlin

这东西本身基本上可以工作-BottomSheet会显示并隐藏,只要我愿意,但是我要根据列表中单击的项目动态地向其中传递一些数据

这是根据教程在代码中的工作方式:

// Fragment creation
var bottomSheetFragment : Fragment? = null
bottomSheetFragment = supportFragmentManager.findFragmentById(R.id.filter_fragment)

// Behavior configuration
private var mBottomSheetBehavior: BottomSheetBehavior<View?>? = null
bottomSheetFragment?.let {
        BottomSheetBehavior.from(it.view)?.let { bsb ->
            bsb.state = BottomSheetBehavior.STATE_HIDDEN
            mBottomSheetBehavior = bsb
        }
    }
}

// How we show and hide it
fun show(){
   mBottomSheetBehavior?.state = BottomSheetBehavior.STATE_EXPANDED
}

fun hide(){
   mBottomSheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED
}

因此,它可以正常工作,并且没有片段对象,我可以像往常一样使用NewInstance传递数据。在这种情况下我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用bundle将数据从活动传递到片段,例如

Bundle bundle = new Bundle();
String myMessage = "Stack Overflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);

在该片段中,您可以访问此捆绑包

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle 
 savedInstanceState) {
  String myValue = this.getArguments().getString("message");
   ...
  }

答案 1 :(得分:0)

您可以在 BottomSheetFragment 中添加 nav_graph 并将数据作为 action 的参数传递。

findNavController().navigate(
   MyFragmentDirections.actionMyFragmentToBottomSheetDialog(myData)
)

最后,得到the document中提到的结果。