我有下面的代码。
Fragment emptyViewFragment;
Fragment songListingFragment;
// .... and various codes ...
if (emptyViewFragment == null) {
emptyViewFragment =
(EmptyViewFragment) getFragmentManager().findFragmentByTag(EmptyViewFragment.TAG);
if (emptyViewFragment == null) {
emptyViewFragment = new EmptyViewFragment();
}
}
addFragment(emptyViewFragment, EmptyViewFragment.TAG);
if (songListingFragment == null) {
songListingFragment =
(SongListingFragment) getFragmentManager().findFragmentByTag(SongListingFragment.TAG);
if (songListingFragment == null) {
songListingFragment = new SongListingFragment();
}
}
addFragment(songListingFragment, SongListingFragment.TAG);
这两段if-else代码看起来非常相似,我正在考虑从中创建一个函数,这样我就可以像下面这样编写我的代码:-
EmptyViewFragment emptyViewFragment;
SongListingFragment songListingFragment;
// .... and various codes ...
createFragment(emptyViewFragment, EmptyViewFragment);
createFragment(songListingFragment, SongListingFragment);
甚至更好(因为第二个参数是对象类型中传递的第一个参数)。
EmptyViewFragment emptyViewFragment;
SongListingFragment songListingFragment;
// .... and various codes ...
createFragment(emptyViewFragment);
createFragment(songListingFragment);
应该如何createFragment
编写我的函数?
也许是这样的
private void a (Fragment frag, Class<? extends Fragment> clazz, String tag) {
if (frag == null) {
frag = getFragmentManager().findFragmentByTag(tag);
if (frag == null) {
try {
frag = clazz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
addFragment(frag);
}
您可以访问内部的tag属性,也可以删除tag参数
更新
我现在无法对其进行测试,但是我认为您可以通过这种方式访问静态成员TAG
private void a (Fragment frag, Class<? extends Fragment> clazz) {
try {
if (frag == null) {
frag = getFragmentManager().findFragmentByTag(clazz.getField("TAG").get(null).toString());
if (frag == null) {
frag = clazz.newInstance();
}
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
addFragment(frag);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句