Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在片段之间共享公共资源?_Java_Android_Fragment - Fatal编程技术网

Java 如何在片段之间共享公共资源?

Java 如何在片段之间共享公共资源?,java,android,fragment,Java,Android,Fragment,我有一个带有ViewPager的活动,上面有3个选项卡。应用程序以EventFragment开始,这是第一个选项卡,它包含可以在复选框中选中的项目。当我切换到TicketFragment(第二个选项卡)时,我想获取在EventFragment中签入的项目 我最初的想法是将PagePractivity设置为Singleton并使其存储所有数据,并且可以从那里请求它,但我不知道这是否是一个好方法 我的代码: 页面实用性(启动器) 寻呼机 public class TabPagerAdapter ex

我有一个带有ViewPager的活动,上面有3个选项卡。应用程序以EventFragment开始,这是第一个选项卡,它包含可以在复选框中选中的项目。当我切换到TicketFragment(第二个选项卡)时,我想获取在EventFragment中签入的项目

我最初的想法是将PagePractivity设置为Singleton并使其存储所有数据,并且可以从那里请求它,但我不知道这是否是一个好方法

我的代码:

页面实用性(启动器)

寻呼机

public class TabPagerAdapter extends FragmentPagerAdapter {
    private Context context;

    public TabPagerAdapter(FragmentManager fm, Context context) {
        super(fm);
        this.context = context;
    }

    // This method is called whenever the adapter needs a Fragment for a certain position
    @Override
    public Fragment getItem(int position) {
        Fragment ret = null;
        switch (position) {
            case 0:
                ret = new EventFragment();
                break;
            case 1:
                ret = new TicketFragment();
                break;

            case 2:
                ret = new BalanceFragment();
                break;
        }
        return ret;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        String title;
        switch (position) {
            case 0:
                title = context.getString(R.string.events);
                break;
            case 1:
                title = context.getString(R.string.ticket);
                break;
            case 2:
                title = context.getString(R.string.balance);
                break;
            default:
                title = "";
        }
        return title;
    }

    @Override
    public int getCount() {
        return 3;
    }
}
事件片段:

票务片断:

public class TicketFragment extends Fragment {

    private BettingAdapter adapter;
    private RecyclerView recyclerView;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.content_ticket,
                container, false);

        recyclerView = view.findViewById(R.id.MainRecyclerView);
        adapter=new BettingAdapter((BettingAdapter.BettingItemClickListener) getActivity().getParent());

        return view;
    }
}

有很多选择。
1.从EventFragment访问活动,在此处存储数据,从TicketFragment读取数据。
2.在首选项或数据库中存储数据,有关保存数据的详细信息:
3.为此共享状态创建虚拟机,有关虚拟机的更多信息:

4.单例是可以接受的,若它是新的数据类,活动不能是单例的,活动的生命周期由android处理,但VM是这种方法的进化

您可以尝试使用事件总线来实现它。但我想知道你为什么需要它?我的TicketFragment是基于EventFragment中选中的项目的。或者说我为什么需要它是什么意思?当使用viewpager选项卡时,它意味着它是独立的。您可以在一个片段中将数据保存在数据库中或发布到服务器,然后在另一个片段中获取itNope,无需将活动设置为单例。片段已经有了
getActivity()
方法。感谢您的回复,我最终选择了数据库方法。
public class TicketFragment extends Fragment {

    private BettingAdapter adapter;
    private RecyclerView recyclerView;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.content_ticket,
                container, false);

        recyclerView = view.findViewById(R.id.MainRecyclerView);
        adapter=new BettingAdapter((BettingAdapter.BettingItemClickListener) getActivity().getParent());

        return view;
    }
}