首页 > 解决方案 > 如何使用两个片段之间发送的数据修改 ArrayList?

问题描述

我有一个数组列表,它负责将一组练习名称存储为“锻炼”。位于 Fragment A 中的数组列表从通过 Fragment B 中的 Bundle 发送的参数中获取数据。

当用户想要选择一个练习时,他们按下片段 A 上的 2 个按钮选项,该选项填充片段 B 上的不同练习名称。当在片段 B 中选择一个练习时,练习名称将被发送回片段 A。

从 Fragment B 获取的参数旨在附加到 Fragment A 中的数组列表中,但是每次重新加载 Fragment A 时,数组列表都会刷新,因此会删除之前保存的练习。我知道这是因为new ArrayList<String>()是在 Fragment A 的 onCreateView 中定义的,但是有没有办法只能创建一次?(关于片段 A 的初始创建,而不是片段 B 和 A 之间的每次转换)。

片段 A 的 OnCreateView:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        final View view =inflater.inflate(R.layout.fragment_editor, container, false);

        //BUTTON SETUP
        final Button addUpButton  = (Button) view.findViewById(R.id.btnAddUpper);
        addUpButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                newExe(addUpButton);
            }
        });

        final Button addLowButton  = (Button) view.findViewById(R.id.btnAddLower);
        addLowButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                newExe(addLowButton);
            }
        });

        ListView listView = (ListView) view.findViewById(R.id.lstWorkout);

        //CREATE AN ARRAY LIST TO AMMEND WITH EXERCISES
        workoutSave = new ArrayList<String>();
        if (getArguments() == null) {
            return view;
        }
        else{
            getValue= getArguments().getString("Movement");
            workoutSave.add(getValue);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), R.layout.item_list, R.id.txtWorkout, workoutSave);
            adapter.notifyDataSetChanged();
            listView.setAdapter(adapter);
        }

        return view;
    }

按下列表项时如何从 Fragment B 重新加载 Fragment A:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String exercise = lstExe.get(position);
                Fragment myFragment = new EditorFragment();
                Bundle args = new Bundle();
                args.putString("Movement", exercise);
                myFragment.setArguments(args);
                getFragmentManager().beginTransaction().add(R.id.frame_layout,myFragment).commit();
            }
        });

标签: javaandroidandroid-fragments

解决方案


推荐阅读