You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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个标签页加载ArtistsTab Fragment
  • ArtistsTab的onCreateView和onViewCreated会正常执行,初始化ListView并设置Adapter
  • 标签页里就能看到你添加的列表内容了

内容的提问来源于stack exchange,提问作者devesh kumawat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:23:37