"commitNow()"和"postDelayed"如何使这段代码工作?



我试图做一些片段工作。我将回收器视图布局放入布局中,并在片段onCreateView初始化回收器视图。 最后,我设置了回收器视图的 pos 动态及其项目。

我有这样的代码使其即使在 0 mills 延迟的情况下也能在commitNowpostDelayed下正常工作,但我不知道为什么:

getSupportFragmentManager()
.beginTransaction()
.replace(R.id.parentLayout, popupFragment)
.commitNow();
new Handler().postDelayed(()->popupFragment.show(), 0);

但我试过:

getSupportFragmentManager()
.beginTransaction()
.replace(R.id.parentLayout, popupFragment)
.commitNow();
popupFragment.show();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.parentLayout, popupFragment)
.commitNowAllowingStateLoss();
popupFragment.show();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.parentLayout, popupFragment)
.runOnCommit(()->popupFragment.show())
.commitNowAllowingStateLoss();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.parentLayout, popupFragment)
.runOnCommit(()->popupFragment.show())
.commitNow();

它们都有一个未初始化的高度。

根据我的猜测,这是关于postDelayed使代码在下一个循环上运行,但是,runOnCommit似乎也先提交然后运行可运行,为什么这不起作用?

如果你想要一个"popup"片段,建议是像这样使用AlertDialog类(并从onCreateView重构你的代码,因为你不能保证有对onCreateView活动的引用(:

@Override
public void onViewCreated(View view, Bundle onSaveInstanceState) {
super.onViewCreated(view, onSaveInstanceState);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = LayoutInflater.from(getActivity());
View popupFragmentsResourceView = inflater.inflate(R.layout.fragment_popup_view, null);
builder.setView(popupFragmentsResourceView);
//grab controls here
//RecyclerView rv = popupFragmentsResourceView.findViewById(R.id.some_id);
//rv.setAdapter(new CustomAdapter(getActivity));
//set a click button for your dialog builder
builder.show();
}

最新更新