【问题标题】:Update data to tab Fragment Android when swipe滑动时将数据更新到选项卡 Fragment Android
【发布时间】:2016-12-21 22:34:23
【问题描述】:

我的代码有问题,我尝试通过搜索 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;
  }

}

【问题讨论】:

    标签: java android android-fragments tabs fragment


    【解决方案1】:

    当同时使用ViewPager时,不仅可见Fragment被加载,而且下一个被加载,所以第二个Fragment的onCreateView将在Activity的最开始被调用。因此,您不应在onCreateView 中调用notifyDatasetChanged,而是在稍后添加歌曲时调用。

    【讨论】:

    • 我这样做了,但它不起作用,我的代码是当用户点击每首歌曲时,这首歌将更新到数据库并显示最喜欢的标签。但它只更新到数据库,直到重新启动应用程序才显示在收藏选项卡中。
    • 你能发布一些代码吗?此外,您使用一些自定义适配器。是CursorAdapter吗?如果是,您是否在对数据库进行操作后交换光标?
    • 它可用于编辑,请帮助我和tks这么多。
    【解决方案2】:

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

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

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

    如果您有更多问题,请告诉我。

    【讨论】:

    • 我尝试了,但它不起作用,希望您可以在这里编辑我在 GitHub 中的代码:
    • github.com/anhpha90/KaraokeList 我想投票给你的评论,但我不能因为至少有 15 名声望。非常感谢您的帮助。
    • 我想在用户滑动更改选项卡时找到一个方法获取事件,但它不起作用,
    • 我见过你回购。抱歉,但我不会为您编写代码,据我所知,在我上次发表评论后,您没有更改任何内容。尝试将您的更改推送到 github,这样我就可以看到您做了什么。变化最多的是addDsYeuThich方法。
    • 感谢您的帮助,当用户点击喜欢时,我可以通过调用方法 addYehthich 来做到这一点,但也许它不是最佳的。再次感谢您
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多