[英]pass data to another fragment by swipe view with tab android studio,not button
[英]Update data to tab Fragment Android when swipe
我的代码有问题,我尝试通过搜索google进行修复,但无法正常工作。 我尝试编写一个卡拉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;
}
}
同时使用ViewPager
时,不仅会加载可见的Fragment
,还会加载下一个Fragment,因此第二个Fragment的onCreateView
将在Activity
开始处调用。 因此,您不应在onCreateView
调用notifyDatasetChanged
,而应在以后添加歌曲时调用。
我的评论太长,因此我将其发布在其他答案中。
您的代码中几乎没有错误。
notifyDataSetChanged
和notifyAll
之间的区别。 第一个关于刷新适配器,第二个关于唤醒线程(我问,这不是您想要的) ArrayAdapter
因此它们基于内部ArrayList
。 您的两个适配器都使ArrayList
脱离MainActivity
。 在方法addDsYeuThich
,将元素添加到列表中,但是必须在第二个片段中添加适配器。 为此,在MainActicity
您必须保留对此片段的引用,并在此方法结束时通知其适配器。 而且,在addDsYeuThich
的开头,您要重新初始化ArrayList
。 您不能这样做,因为secondFragment仍保留旧列表。 您应该只初始化一次此列表(即在onCreate中),并且在addDsYeuThich
仅调用clear
。 如果您还有其他问题,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.