Java 如何从另一个活动访问片段列表?

Java 如何从另一个活动访问片段列表?,java,android,list,android-activity,Java,Android,List,Android Activity,我有一个片段,它有一个项目列表。我想从另一个活动访问该列表,该活动在用户输入编辑文本并保存项目时在列表中添加项目。此项应添加到片段列表中。我怎样才能做到这一点??如何从其他活动访问片段中创建的列表 碎片 public class ItemFragment extends Fragment { RecyclerView recyclerView; IAdapter adapter; ArrayList<Expense> items; public

我有一个片段,它有一个项目列表。我想从另一个活动访问该列表,该活动在用户输入编辑文本并保存项目时在列表中添加项目。此项应添加到片段列表中。我怎样才能做到这一点??如何从其他活动访问片段中创建的列表

碎片

public class ItemFragment extends Fragment {

    RecyclerView recyclerView;

    IAdapter adapter;
    ArrayList<Expense> items;

    public ItemFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_item_list, container, false);
        setHasOptionsMenu(true);
        Expense e = new Expense();

        recyclerView = (RecyclerView) view.findViewById(R.id.RecyclerView);
        ImageButton imageButton = (ImageButton) view.findViewById(R.id.imgbtn_fab);
        LinearLayoutManager llm = new LinearLayoutManager(this.getActivity());


        items=new ArrayList<>();
        recyclerView.setLayoutManager(llm);

        recyclerView.setHasFixedSize(true);

        initializeDataType1();
        adapter = new IAdapter(getActivity(),items);
        recyclerView.setAdapter(adapter);


        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(ItemFragment.this.getActivity(), Main2Activity.class);
                startActivity(intent);


            }
        });
        return view;
    }

    private void initializeDataType1() {

        items.add(new Expense("1000", "2000", 1));
        items.add(new Expense("2000", "5000", 1));
        items.add(new Expense("3000", "400", 2));
        items.add(new Expense("1000", "4000", 1));
        items.add(new Expense("3000", "3000", 2));
        items.add(new Expense("2000", "100", 1));
        items.add(new Expense("2000", "3333", 2));
        items.add(new Expense("3000", "shopping", 1));
        items.add(new Expense("1000", "food", 1));
        items.add(new Expense("1000", "food", 2));
        items.add(new Expense("2000", "drink", 1));
        items.add(new Expense("3000", "shopping", 2));
        items.add(new Expense("2000", "3333", 1));
        items.add(new Expense("3000", "shopping", 1));
        items.add(new Expense("1000", "food", 1));
        items.add(new Expense("1000", "food", 1));
        items.add(new Expense("2000", "drink", 1));
        items.add(new Expense("3000", "shopping", 1));
    }
}

请帮助…

将该列表传递给Activity,进行更改,将列表传递回fragment并显示新列表。

只需在fragment上创建一个公共方法,返回此列表即可


然后获取对片段的引用并调用该方法。

根据官方文档,无法访问来自其他活动的片段:

您可以将片段视为活动的模块化部分,它有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像可以在不同活动中重用的“子活动”)

片段必须始终嵌入到活动中,并且片段的生命周期直接受宿主活动生命周期的影响。例如,当活动暂停时,其中的所有片段都暂停,当活动被销毁时,所有片段也暂停

但是,您可以将列表传递给意图中的第二个活动:

Intent intent = new Intent(ItemFragment.this.getActivity(),Main2Activity.class);
intent.putExtra("key", items);
getActivity().startActivity(intent);
在Main2活动onCreate()中:

items=(ArrayList)getIntent().getSerializableExtra(“key”);

钥匙可以任意选择。请记住,您将收到列表的副本,而不是实际对象。

您可以使用片段列表的对象作为指针,并将此指针发送到Main2活动。当片段再次可见时,只需刷新recyclerview。例如,按如下方式启动Main2活动:

Intent intent = new Intent(context, Main2Activity.class);
Bundle bundle  = new Bundle();
bundle.putSerializable("list", items);
intent.putExtras(bundle);
context.startActivity(intent);

在onCreate()方法中,接收此列表指针并添加项。完成活动并恢复片段后,只需刷新recyclerview。

假设从用户获取数据后不需要活动类。如果是这种情况,请使用从片段启动活动。当用户完成所有EditText字段的输入并点击Save,然后将所有数据设置为bundle并
finish()
活动。现在从片段的
onActivityResult
获取数据,并相应地更新列表。

它显示无法解析捆绑包中项目的符号。putSerializable(“列表”,项目);以及如何刷新recycler视图?您在哪里调用Main2Activity?要刷新recyclerView,您可以重新初始化适配器并将其重置为recyclerView。Main2Activity是从ItemFragmentitems调用的。FragmentItems是您正在处理的列表。如果您将以上代码行放入ItemFragment,一切都应该正常。当我在第二个活动中传递列表时,它在ItemFragment上显示错误,即它不是封闭类
items = (ArrayList<Expense>) getIntent().getSerializableExtra("key");
Intent intent = new Intent(context, Main2Activity.class);
Bundle bundle  = new Bundle();
bundle.putSerializable("list", items);
intent.putExtras(bundle);
context.startActivity(intent);