我的switch case statement
中有这个FragmentStatePagerAdapter
。而且我研究了许多类似的问题,但没有一个提供更短的答案,这意味着switch
案例仍在其代码中。
此代码确实重复且难看。有没有办法使它看起来更短?
@Override
public SongListFragment getItem(int position) {
SongListFragment slf = new SongListFragment();
switch (position) {
case 0:
slf.setAudioList(getAudioList(tabTitles[0]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
case 1:
slf.setAudioList(getAudioList(tabTitles[1]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
case 2:
slf.setAudioList(getAudioList(tabTitles[2]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
case 3:
slf.setAudioList(getAudioList(tabTitles[3]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
case 4:
slf.setAudioList(getAudioList(tabTitles[4]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
default:
return null;
}
}
答案 0 :(得分:8)
由于每个开关盒的主体几乎相同,因此索引/位置不同。首先,您可以完全摆脱开关的情况:
@Override
public SongListFragment getItem(int position) {
SongListFragment slf = new SongListFragment();
slf.setAudioList(getAudioList(tabTitles[position]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
}
答案 1 :(得分:0)
Lino的答案带有@SMA建议的简单绑定检查。
@Override
public SongListFragment getItem(int position) {
if ( position < 0 || position >= tabTiles.length() ){
//your previous default case
return null;
}else{
SongListFragment slf = new SongListFragment();
slf.setAudioList(getAudioList(tabTitles[position]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
}
}
答案 2 :(得分:-1)
这里:
@Override
public SongListFragment getItem(int position) {
switch (position) {
case 0:
return yourMethod(0);
case 1:
return yourMethod(1);
case 2:
return yourMethod(2);
case 3:
return yourMethod(3);
case 4:
return yourMethod(4);
default:
return null;
}
}
private Object yourMethod(int i) {
SongListFragment slf = new SongListFragment();
slf.setAudioList(getAudioList(tabTitles[i]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
return slf;
}
答案 3 :(得分:-1)
@Override
public SongListFragment getItem(int position) {
// don't need to initialize
SongListFragment slf = null;
// The position is 0 to 4, returns null when position is over tabTiles.length()
if (position >= 0 && position <= 4
&& position < tabTiles.length()) {
slf = new SongListFragment();
slf.setAudioList(getAudioList(tabTitles[position]));
slf.setItemOnClickListener(new SongListFragment.SongListItemOnClickListener() {
@Override
public void onClick(Audio audio) {
itemListener.onClick(audio);
}
});
}
// returns SongListFragment if it is null or not
return slf;
}