Pie*_*ley 5 android android-fragments
在发现我onCreateView花了将近一秒钟的时间来执行该inflater.inflate(...)方法后,我搜索了一下并找到了一个新的类,AsyncLayoutInflater.
我尝试在片段中实现此构造函数,但我不知道如何正确实现它,因为它总是会导致空的空白视图。
我认为我的问题是如何膨胀我的片段,使其具有从onCreateView(super结果)返回的空视图。
这是有效的“正常”版本:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_intervento_luogo, container, false);
//do my stuffs
return view;
}
Run Code Online (Sandbox Code Playgroud)
这不会并显示一个空视图:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
AsyncLayoutInflater asyncLayoutInflater = new AsyncLayoutInflater(getContext());
asyncLayoutInflater.inflate(R.layout.fragment_intervento_luogo, container, new AsyncLayoutInflater.OnInflateFinishedListener() {
@Override
public void onInflateFinished(@NonNull View view, int resid, @Nullable ViewGroup parent) {
// do my stuffs
}
});
return super.onCreateView(inflater, container, savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将这个异步充气器放入 onResume、onViewCreated 和 onCreate 中,但没有人工作。
我应该如何正确实施?我不敢相信没有办法跳过 onCreateView 内的异步执行的通货膨胀。
谢谢大家
在 onCreateView(...) 内部,您创建并返回片段的布局。当前您返回 super.onCreateView(inflater,container,savedInstanceState); 所以它是空白的,当你的 AsyncLayoutInflater 完成时,它不会影响你的片段布局。
当您的布局膨胀时 - 将其添加到您的 ViewGroup 中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
AsyncLayoutInflater asyncLayoutInflater = new AsyncLayoutInflater(getContext());
asyncLayoutInflater.inflate(R.layout.fragment_intervento_luogo, container, new AsyncLayoutInflater.OnInflateFinishedListener() {
@Override
public void onInflateFinished(@NonNull View view, int resid, @Nullable ViewGroup parent) {
parent.addView(view);
onViewCreated(view, savedInstanceState)
}
});
return super.onCreateView(inflater, container, savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)
并添加 onViewCreated 来通知系统创建了哪些布局。
像这样的代码对我有用:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val asyncLayoutInflater = AsyncLayoutInflater(context!!)
asyncLayoutInflater.inflate(R.layout.fragment_characters, container) { view, resid, parent ->
binding = FragmentCharactersBinding.bind(view)
binding.vm = vm
container?.addView(binding.root)
onViewCreated(binding.root, savedInstanceState)
}
return super.onCreateView(inflater, container, savedInstanceState)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2755 次 |
| 最近记录: |