首页 > 解决方案 > Android Studio 保留一个带有片段的数组列表?

问题描述

我正在开发一个应用程序,它将使用片段和列表视图向用户显示项目列表。目前,在我的 AlarmFragment1() 中,我声明了一个私有 ArrayList。

private ArrayList<Alarms> alarms = new ArrayList<Alarms>

我使用此列表在 OnCreate 中使用我创建的 AlarmAdapter 填充 ListView。但是,我希望能够在其他片段中编辑此警报列表,例如删除项目。

在我的 AlarmFragment() 中,我有一个项目侦听器,用于打开一个新片段,用户可以在其中选择删除他们单击的项目。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Bundle bundle = new Bundle();
                bundle.putInt("item_index", i);

                FragmentManager manager = getFragmentManager();
                FragmentTransaction transaction = manager.beginTransaction();
                DeleteAlarm fragment = new DeleteAlarm();
                fragment.setArguments(bundle);

                transaction.add(R.id.main_frame, fragment);
                transaction.commit();

在我的 EditFragment 内部,我有一个删除项目按钮侦听器。

delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Attempt at deleting item
                AlarmFragment alarm = new AlarmFragment();
                alarm.deleteAlarm(myInt); //<--myInt from bundle
                fListener = (OnFragmentInteractionListener) getActivity();
                fListener.changeFragment(3, "alarm");
            }
        });

我尝试在 AlarmFragment() 中创建一个可以为我编辑列表的公共方法,例如:

public void remove(int i){ alarms.remove(i); }

这不仅不起作用,而且我还必须想办法重新显示我最初在 OnCreateView() 中创建的 listView。我已经绕了很长一段时间没有成功。我也尝试添加一个新的警报,但即使这样也没有用。有什么方法我可以做到这一点或存储数组列表的不同方式,因为当应用程序关闭时列表将被重置。

标签: androidandroid-fragmentsarraylist

解决方案


您的问题的很大一部分是您正在函数中创建一个新AlarmFragmentonClick。您应该使用仍在堆栈中的那个。至于您的设计,您应该让 Activity 保存警报数组,而不是片段。您可以让 Activity 在数组数据发生更改时通知其所有 Fragment,通过侦听器或直接调用函数。


推荐阅读