用没有构造函数的监听器初始化片段



用户将面临以下问题:找不到Fragment构造函数当旋转手机或切换到暗模式(当我的活动重新创建时)。

无法启动活动ComponentInfo{e.c uran. qaz/e.c uran. qaz .ui. zhuz。QuranByPage}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment. e. QuranByPage: could not find fragment constructor

我有多个地方在我的项目,我必须使用碎片。我用这个方法几乎解决了所有的问题。但是,我必须用侦听器初始化我的Fragment。但是,这个解决方案是不可能的。由于我在StackOverflow上的声誉,我无法对这个答案发表评论。

有一个公认的答案。有人说:

你创建的所有Fragment类必须有一个公共的、无参数的构造函数。一般来说,最佳实践是根本不定义任何构造函数,而依赖Java为您生成默认构造函数。

并建议这样初始化Fragment:

public static ProductsFragment newInstance(String id) {
Bundle args = new Bundle();
args.putString("id", id);
ProductsFragment f = new ProductsFragment();
f.setArguments(args);
return f;
}

是否有办法在newInstance方法中用Listener初始化它??附言:我将感激任何帮助。这是我的第一个问题,不要把我看得那么强。:)

解决方案在这里

带有DatePicker Callback的片段中的非默认构造函数

在答案中,这对我来说很有效,是这样写的:

  1. 该片段应该有一个空的构造函数,如果你不想有问题的配置改变,如屏幕旋转或低内存情况。当配置改变时,Android会自动使用空构造函数重新创建Fragment。
  2. 适合您的情况。DateChangeListener应该由主机活动-如果你打开DatePickerFragment从活动TargetFragment(通过设置setTargetFragment从Fragment) -如果你打开DatePickerFragment从Fragment(像父Fragment)
  3. 从DatePickerFragment,你可以通过下面的强制转换访问DateChangeListener:(DateChangeListener) this.getActivity()——在如果主机活动实现DateChangeListener (DateChangeListener)this.getTargetFragment()——>如果父片段(setTargetFragment)实现了DateChangeListener

这是一个重复的问题,在另一个上下文。所以我不会删除这个问题。

最新更新