我将通过传递通用字段(演示者)来实现片段的初始化,然后将此演示者连接到创建的视图。
public class BaseViewFragment <P extends BasePresenter> extends Fragment implements BaseView {
static private P presenter; //the problme is here, I do not allowed this
static private BaseViewFragment baseViewFragment;
.
.
.
public static <P extends BasePresenter> BaseViewFragment initialize(P presenter) {
if (baseViewFragment != null) {
presenter.setView(baseViewFragment);
} else {
baseViewFragment = new BaseViewFragment();
presenter.setView(baseViewFragment);
}
BaseViewFragment.presenter= presenter;
return baseViewFragment;
}
但似乎通用静态字段是不允许的。我该如何处理这个问题?
来自Java doc:
无法声明类型为类型参数的静态字段
类的静态字段是所有类共享的类级变量
类的非静态对象。因此,类型的静态字段
不允许使用参数。
这是不可能的,因为静态字段由类的所有实例共享BaseViewFragment
,如果允许的话,对于每个新的BaseViewFragment
实例你可以指定一个新的Generic Type parameter
。所以这是不允许的。
你可以做的是:使用 Presenter 实例传递给 FragmentsetPresenter
方法并初始化。
例如,
P presenter; // no need for static
public BaseViewFragment() {
}
public void setPresenter(P presenter) {
this.presenter = presenter;
}
设置演示者:
baseViewFragment = new BaseViewFragment();
baseViewFragment.setPresenter(presenter);
顺便说一句,有一个Fragment
在静态变量中可能会导致内存(Activity
)泄漏。当Fragment
破坏?如果没有,你就会泄露你的Fragment
和界限Activity
和所有的Views
in it.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)