滑动

时间:2016-12-21 22:34:23

标签: java android android-fragments tabs fragment

我的代码有问题,我尝试通过搜索谷歌修复它但不工作。 我尝试编写一个卡拉OK列表应用程序来查看列表歌曲和喜欢的歌曲。这个应用程序有2个片段选项卡,列表和收藏夹,我希望当用户点击列表选项卡或收藏夹选项卡中添加收藏夹时,收藏夹选项卡将立即更新。但它不起作用。我必须重启我的应用才能查看结果。我尝试通过getItem刷新收藏夹选项卡,但它不起作用。

这是我的代码,请帮助我,非常感谢。 主要活动:

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

    adapter.addFrag(new DanhSach(), "  ZANHSÁCH");
    adapter.addFrag(new YeuThich(), "  YÊUTHÍCH");
    adapter.addFrag(new LienHe(), "  LIÊNHỆ");
    viewPager.setOffscreenPageLimit(0);
     viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }
    @Override
    public int getItemPosition(Object object) {

            return super.getItemPosition(object);
    }

    @Override
    public Fragment getItem(int position) {
       return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFrag(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return null;
        //return mFragmentTitleList.get(position);
    }
}

最喜欢的课程:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.yeuthich, container, false);
    ListView lvdanhsach = (ListView) view.findViewById(R.id.lvyeuthich);
    MainActivity main1 = (MainActivity) getActivity();

    YtAdapter = new BaiHatAdapter(getActivity(),R.layout.items,main1.dsYeuthich);
    YtAdapter.notifyDataSetChanged();
    lvdanhsach.setAdapter(YtAdapter);


    return view;
  }

}

2 个答案:

答案 0 :(得分:0)

在同一时刻使用ViewPager时,不会仅加载可见的Fragment,而是加载下一个,因此第二个片段的onCreateView将在最开始时被调用Activity。因此,您应该在notifyDatasetChanged内拨打onCreateView,但稍后在添加歌曲时调用。{/ p>

答案 1 :(得分:0)

我的评论太长了,所以我将其发布在不同的答案中。

您的代码中存在少量错误。

  1. 您必须了解notifyDataSetChangednotifyAll之间的区别。第一个是关于刷新适配器,第二个是关于唤醒线程(我觉得,它不是你想要的wat)
  2. 您的适配器为ArrayAdapter,因此它们基于内部ArrayList。这两个适配器都会ArrayList保持MainActivity。在方法addDsYeuThich中,您将元素添加到列表中,但您必须在第二个片段中添加nofity适配器。为此,在MainActicity中,您必须保留对此片段的引用,并在此方法结束时通知其适配器。更重要的是,在addDsYeuThich开始时,您重新初始化ArrayList。你不能这样做,因为secondFragment仍然保留旧列表。您应该只将此列表初始化一次(即在onCreate中),并在addDsYeuThich中仅调用clear
  3. 如果您遇到更多问题,请与我联系。