Java 如何使用每个新参数在ArrayList中创建新对象

Java 如何使用每个新参数在ArrayList中创建新对象,java,arraylist,Java,Arraylist,公共类AlarmsFragment扩展了片段{ FloatingActionButton floatingActionButton; RecyclerView recyclerView; TextView checkText; ArrayList<AlarmObjects> alarmObjects; public AlarmsFragment() { // Required empty public constructor } @Override public Vie

公共类AlarmsFragment扩展了片段{

FloatingActionButton floatingActionButton;
RecyclerView recyclerView;
TextView checkText;
ArrayList<AlarmObjects> alarmObjects;


public AlarmsFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View v = inflater.inflate(R.layout.fragment_alarms, container, false);

    floatingActionButton = v.findViewById(R.id.fab_button);
    recyclerView = v.findViewById(R.id.rv_alarms);

     alarmObjects = new ArrayList<>();
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
    RecyclerView.LayoutManager rvLayoutManager = linearLayoutManager;
    recyclerView.setLayoutManager(rvLayoutManager);
    AlarmAdapter alarmAdapter = new AlarmAdapter(getContext(),alarmObjects);
    recyclerView.setAdapter(alarmAdapter);

    Bundle arguments = getArguments();

    if (arguments != null){
       String newTime = getArguments().getString("newTimm");
        String newNotes = getArguments().getString("newNott");
        checkText.setText(newTime + newNotes);
        alarmObjects.add(new AlarmObjects(newNotes,newTime));
       }

    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ((MainActivity)getActivity()).showPopupmeth();
        }
    });


    return  v;

    }

   }

使用此方法,我返回到我的alarmsFragment。当我从对话框片段返回到它时,正如我所理解的,它每次都会创建新的ArrayList。如何使用getArguments使它显示现有对象并添加新对象对不起,我无法获得您想要的操作

您可以在此处初始化ArrayList:

alarmObjects = new ArrayList<>();
你期望什么样的行为

编辑:

试试这个:

FloatingActionButton floatingActionButton;
RecyclerView recyclerView;
TextView checkText;
ArrayList<AlarmObjects> alarmObjects = new ArrayList<>();

public AlarmsFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View v = inflater.inflate(R.layout.fragment_alarms, container, false);

    floatingActionButton = v.findViewById(R.id.fab_button);
    recyclerView = v.findViewById(R.id.rv_alarms);

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
    RecyclerView.LayoutManager rvLayoutManager = linearLayoutManager;
    recyclerView.setLayoutManager(rvLayoutManager);
    AlarmAdapter alarmAdapter = new AlarmAdapter(getContext(),alarmObjects);
    recyclerView.setAdapter(alarmAdapter);

    Bundle arguments = getArguments();

    if (arguments != null){
       String newTime = getArguments().getString("newTimm");
        String newNotes = getArguments().getString("newNott");
        checkText.setText(newTime + newNotes);
        alarmObjects.add(new AlarmObjects(newNotes,newTime));
       }

    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ((MainActivity)getActivity()).showPopupmeth();
        }
    });


    return  v;
    enter code here
    }

   }
FloatingActionButton FloatingActionButton;
回收视图回收视图;
文本视图检查文本;
ArrayList alarmObjects=新建ArrayList();
公共警报片段(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment_报警,容器,错误);
floatingActionButton=v.findViewById(R.id.fab_按钮);
recyclerView=v.findViewById(R.id.rv_报警);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(getContext());
RecyclerView.LayoutManager rvLayoutManager=linearLayoutManager;
recyclerView.setLayoutManager(rvLayoutManager);
AlarmAdapter AlarmAdapter=新的AlarmAdapter(getContext(),alarmObjects);
recyclerView.setAdapter(alarmAdapter);
Bundle arguments=getArguments();
if(参数!=null){
字符串newTime=getArguments().getString(“newTimm”);
字符串newNotes=getArguments().getString(“newNott”);
checkText.setText(newTime+newNotes);
添加(新的alarmObjects(newNotes,newTime));
}
floatingActionButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
((MainActivity)getActivity()).showPopupmeth();
}
});
返回v;
在这里输入代码
}
}

这只是代码的一部分。我假设上面的代码是为每个新参数调用的。如果是这样,那么发生的情况如下: 在第一行,您正在执行new ArrayList(),它总是创建一个新的(空的)数组列表。 在最后一行,您正在向列表中添加新的AlarmObjects。 因此,当您尝试从列表中检索元素时,您会得到最近添加的元素。这就是为什么您认为它正在修改现有元素的原因。 实际上,您正在添加一个新元素。但您每次都在重新创建列表。因此,您没有看到前面的元素

不要每次都创建一个新的arraylist,而是在父方法中创建一个arraylist并将引用传递给此方法

public void parentMethod(){
    List<AlarmObjects> alarmObjects = new ArrayList<>();
    childMethod(alarmObjects);
}
public void childMethod(List<AlarmObjects> alarmObjects){
    //all of your code except the new ArrayList<>() goes here
}
public void parentMethod(){
List alarmObjects=new ArrayList();
childMethod(报警对象);
}
public void childMethod(列出报警对象){
//除了新的ArrayList()之外,所有代码都在这里
}

您只是集合框架Java 8中的一部分,不够清晰,因此我假设您想要创建不可变的ArrayList,您可以使用集合框架Java 8的不可修改列表方法实现它,如下所示

i、 e收款不可修改清单(清单)

例如:

List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("four");
List List=newarraylist(Arrays.asList(“一”、“二”、“三”));
列表不可修改列表=集合。不可修改列表(列表);
不可修改列表。添加(“四”);

这段代码是否在循环中。嗯,首先将alarmObjects列表添加到alarmAdapter,然后将元素添加到该列表当我重新启动片段时,我想添加新对象,我从对话框片段中获得两个字符串。这段代码只是更新现有对象,而不是创建新对象。您所说的重新启动片段是什么意思。添加要添加新对象时运行的完整方法。大多数情况下,每次调用该方法时,您可能都在创建新的ArrayList,这会产生类似于更新同一对象的效果,但实际上它每次都在创建新的ArrayList.AlarmsFragment AlarmsFragment=new AlarmsFragment();Bundle=新Bundle();bundle.putString(“newTimm”,times);bundle.putString(“newNott”,notes);alarmsFragment.setArguments(bundle);((MainActivity)getActivity()).setFragment(alarmsFragment,R.string.alarm_string);解雇();这是我的对话fragment@Shoha执行alarmObjects=new ArrayList()时;您正在初始化对象alarmObjects。您正在创建一个新的空arraylist对象。如果您不希望这样,您必须删除此指令。我是否要将其移出范围?我需要至少有一个Arraylist,对吗?我在哪里声明它以便它只执行一次@rockyIt只是您发布的代码的一部分。所以我不能给出精确的答案。这段代码是否在方法中?我已经给出了一个伪代码,假设这段代码在一个子方法中,并且有一个父方法调用它。在从对话框片段中提取字符串之后,我再次对这个片段进行事务处理,它们都再次执行
public void parentMethod(){
    List<AlarmObjects> alarmObjects = new ArrayList<>();
    childMethod(alarmObjects);
}
public void childMethod(List<AlarmObjects> alarmObjects){
    //all of your code except the new ArrayList<>() goes here
}
List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("four");