我的代码有问题,我尝试通过搜索谷歌修复它但不工作。 我尝试编写一个卡拉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;
}
}
答案 0 :(得分:0)
在同一时刻使用ViewPager
时,不会仅加载可见的Fragment
,而是加载下一个,因此第二个片段的onCreateView
将在最开始时被调用Activity
。因此,您应该在notifyDatasetChanged
内拨打onCreateView
,但稍后在添加歌曲时调用。{/ p>
答案 1 :(得分:0)
我的评论太长了,所以我将其发布在不同的答案中。
您的代码中存在少量错误。
notifyDataSetChanged
和notifyAll
之间的区别。第一个是关于刷新适配器,第二个是关于唤醒线程(我觉得,它不是你想要的wat)ArrayAdapter
,因此它们基于内部ArrayList
。这两个适配器都会ArrayList
保持MainActivity
。在方法addDsYeuThich
中,您将元素添加到列表中,但您必须在第二个片段中添加nofity适配器。为此,在MainActicity
中,您必须保留对此片段的引用,并在此方法结束时通知其适配器。更重要的是,在addDsYeuThich
开始时,您重新初始化ArrayList
。你不能这样做,因为secondFragment仍然保留旧列表。您应该只将此列表初始化一次(即在onCreate中),并在addDsYeuThich
中仅调用clear
。如果您遇到更多问题,请与我联系。