繁体   English   中英

滑动时将数据更新到Fragment Android选项卡

[英]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 ,而应在以后添加歌曲时调用。

我的评论太长,因此我将其发布在其他答案中。

您的代码中几乎没有错误。

  1. 您必须知道notifyDataSetChangednotifyAll之间的区别。 第一个关于刷新适配器,第二个关于唤醒线程(我问,这不是您想要的)
  2. 您的适配器是ArrayAdapter因此它们基于内部ArrayList 您的两个适配器都使ArrayList脱离MainActivity 在方法addDsYeuThich ,将元素添加到列表中,但是必须在第二个片段中添加适配器。 为此,在MainActicity您必须保留对此片段的引用,并在此方法结束时通知其适配器。 而且,在addDsYeuThich的开头,您要重新初始化ArrayList 您不能这样做,因为secondFragment仍保留旧列表。 您应该只初始化一次此列表(即在onCreate中),并且在addDsYeuThich仅调用clear

如果您还有其他问题,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM