繁体   English   中英

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

[英]How to create new object in ArrayList with every new arguments

公共类AlarmsFragment扩展Fragment {

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;

    }

   }

它会不断更新创建的相同对象,但不会创建新对象,您能帮我吗?

  public void setFragment(Fragment fragment, int id) {
    changeTitle(id);

    FragmentTransaction fragmentTransaction = 
   getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.main_frame, fragment);
    fragmentTransaction.commit();
}

使用这种方法,我回到我的alarmsFragment。 当我从对话框片段回到它时,据我了解,它每次都会创建一个新的ArrayList。 我如何使其显示现有对象并使用getArguments添加新对象

对不起,但是我没办法做。

您可以在此处初始化ArrayList:

alarmObjects = new ArrayList<>();

并将第一个对象放入数组中:

 alarmObjects.add(new AlarmObjects(newNotes,newTime)); }

您期望什么行为?

编辑:

尝试这个:

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
    }

   }

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

不必每次都创建一个新的数组列表,而是在父方法中创建一个,并将引用传递给此方法。

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
}

您只是其中的一部分,还不够清楚,所以我假设您要创建Immutable ArrayList,可以通过使用Collections框架Java 8的unmodifiableList方法如下实现

即Collections unmodifiableList(list);

范例:

List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("four");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM