Abd*_*man 8 android fragment dialogfragment bottom-sheet
我从片段A开始bottomSheetDialogFragment。我想从该bottomSheetDialogFragment中选择日期,然后将其设置在片段A中。
选择日期已经完成,我只想将其放在片段A中以在某些字段中进行设置。
我如何获得价值?有什么建议怎么做吗?
Android导航架构组件
例如:
假设您使用 navController 从片段 A 打开片段 B。
并且您需要从片段 B 到片段 A 的一些数据。
class B :BottomSheetDialogFragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.your_layout, container, false)
root.sampleButton.setOnClickListener {
val navController = findNavController()
navController.previousBackStackEntry?.savedStateHandle?.set("your_key", "your_value")
dismiss()
}
}
Run Code Online (Sandbox Code Playgroud)
在你的片段A中:
findNavController().currentBackStackEntry?.savedStateHandle?.getLiveData<String>("your_key")
?.observe(viewLifecycleOwner) {
if (it == "your_value") {
//your code
}
}
Run Code Online (Sandbox Code Playgroud)
创建一个这样的接口类
public interface CustomInterface {
public void callbackMethod(String date);
}
Run Code Online (Sandbox Code Playgroud)
在Activity或中实现此接口Fragment。并使其成为此接口的对象。
private CustomInterface callback;
Run Code Online (Sandbox Code Playgroud)
在onCreate或中初始化onCreateView
callback=this;
Run Code Online (Sandbox Code Playgroud)
现在在BottomSheetDialogFragment调用它时在构造函数中传递此回调。
yourBottomSheetObject = new YourBottomSheet(callback);
yourBottomSheetObject.show(getSupportFragmentManager()," string");
Run Code Online (Sandbox Code Playgroud)
现在在您的BottomSheetFragment的构造函数中
私人CustomInterface回调;
public SelectStartTimeSheet(CustomInterface callback){
this.callback=callback;
}
Run Code Online (Sandbox Code Playgroud)
最后使用此回调对象设置您的日期
callback.callbackMethod("your date");
Run Code Online (Sandbox Code Playgroud)
并且您将在“片段”或“活动中”中收到该日期callbackMethod。
小智 7
正如文档所说,覆盖片段的构造函数是一种不好的做法:
每个片段必须有一个 * 空的构造函数,因此它可以在恢复其活动的状态时被实例化。
如果您使用另一个将回调作为参数传递的构造函数,则当框架恢复片段时,您的应用程序会崩溃
推荐的方法是使用 viewModel 和 livedata。
| 归档时间: |
|
| 查看次数: |
4072 次 |
| 最近记录: |