Tab Activity中ListView显示空白问题求助
解决Tab Activity中ListView空白的问题
问题根源
你遇到的核心问题是:MainActivity里的PlaceholderFragment在处理第4个标签时,直接手动inflate了artist布局,但完全没有实例化你写的ArtistsTab Fragment。这就导致ArtistsTab中初始化ListView、设置Adapter的代码根本没机会执行,自然看不到列表内容。而普通Activity能正常显示,是因为你直接触发了列表初始化逻辑,但Tab场景下这块代码被跳过了。
具体修复步骤
1. 正确实现ViewPagerAdapter(关键)
你需要让ViewPagerAdapter为每个标签页返回对应的Fragment,而不是让PlaceholderFragment通过switch加载布局。如果你的ViewPagerAdapter还没正确实现,参考以下代码:
public class ViewPagerAdapter extends FragmentPagerAdapter { private static final int TAB_COUNT = 4; private final String[] tabTitles = {"Songs", "Albums", "Genres", "Artists"}; public ViewPagerAdapter(FragmentManager fm) { super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); } @Override public Fragment getItem(int position) { switch (position) { case 0: return PlaceholderFragment.newInstance(1); case 1: return PlaceholderFragment.newInstance(2); case 2: return PlaceholderFragment.newInstance(3); case 3: // 重点:返回ArtistsTab实例,而非PlaceholderFragment return new ArtistsTab(); default: return null; } } @Override public int getCount() { return TAB_COUNT; } @Override public CharSequence getPageTitle(int position) { return tabTitles[position]; } }
2. 修正ArtistsTab中的小错误
你创建ArrayAdapter时漏写了android.R前缀,会导致系统找不到默认列表项布局,需要修正:
// 修正前 ArrayAdapter arrayAdapter=new ArrayAdapter(getActivity(), layout.simple_list_item_1,my); // 修正后 ArrayAdapter<String> arrayAdapter=new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1,my);
3. 优化PlaceholderFragment(避免内存泄漏)
你当前PlaceholderFragment中的rootView是静态变量,容易引发内存泄漏,建议改成局部变量:
public static class PlaceholderFragment extends Fragment { private static final String ARG_SECTION_NUMBER = "section_number"; public PlaceholderFragment() {} public static PlaceholderFragment newInstance(int sectionNumber) { PlaceholderFragment fragment = new PlaceholderFragment(); Bundle args = new Bundle(); args.putInt(ARG_SECTION_NUMBER, sectionNumber); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView; // 去掉static修饰符 switch (getArguments().getInt(ARG_SECTION_NUMBER)) { case 1: rootView = inflater.inflate(R.layout.songs, container, false); break; case 2: rootView = inflater.inflate(R.layout.album, container, false); break; case 3: rootView = inflater.inflate(R.layout.genres, container, false); break; default: rootView = inflater.inflate(R.layout.songs, container, false); break; } return rootView; } }
验证修复
完成以上修改后重新运行应用:
- ViewPager会为第4个标签页加载
ArtistsTabFragment ArtistsTab的onCreateView和onViewCreated会正常执行,初始化ListView并设置Adapter- 标签页里就能看到你添加的列表内容了
内容的提问来源于stack exchange,提问作者devesh kumawat
相关产品推荐
相关产品推荐

