Android - 从两个不同的活动中获取和修改相同的列表

时间:2017-05-14 14:35:37

标签: android list android-activity

在我的应用程序中,我创建了MyList.class,看起来像这样:

public class MyList {

private ArrayList<Obj> objList = new ArrayList<>();

//adds object to list
public void addObjToList(Obj obj) {
    objList.add(obj);
}

//gets the whole list
public static ArrayList getObjList() {return objList;}

//gets the size of the list
public static int getObjListSize() {return objList.size();}

//removes obj from list based on his position
public void removeObj(int pos) {
    objList.remove(pos);
}

}

从我创建CreateObj.class的{​​{1}}我有此代码,将其添加到Obj

objList

它成功地将obj添加到列表中。现在从我的// creates the new object Obj newObj = new Obj("Name", 3 /*int*/ ); // creates a new List MyList myList = new MyList(); // adds the obj into the list myList.addObjToList(newObj); 我需要检索它并将其膨胀到recyclerView,我在Main_Activity.class方法中这样做:

onCreate()

请注意,我没有在Main_Activity中设置currentObjList = MyList.getObjList(); //puts list into recycler recyclerView = (RecyclerView) findViewById(R.id.recycler); recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); adapter = new RecyclerAdapter(this, currentObjList); recyclerView.setAdapter(adapter); 因为我希望列表是在CreateObj类中创建的列表。

显然这不是正确的方法,因为如果,我想要从recyclerView中删除一个元素,我需要将其从objList(在MyList.class中)中删除,并且这是不可能的,因为我无法在不设置MyList myList = new MyList()的情况下访问MyList.class方法,如果我将其设置为new,则不会保留从CreateObj类添加的Obj。

简而言之:我如何才能从CreateObj.class和Main_Activity.class中同时访问和修改相同的objList。

1 个答案:

答案 0 :(得分:1)

根据我的评论,这是我的建议草案。 请注意我没有运行此代码,所以它必须有错误和拼写错误,这只是为了反映我提出的建议。

接收输入的Activity包含对创建对象的类和包含ArrayList的类的引用。

用户输入后,活动会要求对象创建者创建一个ojbect并将其传递回活动。然后,活动将其添加到列表中。 最后,它通知回收器适配器数据已更改。

在MainActivity中:

    private CreateObj createObj;
    private MyList myList;

    //Other memeber variables for Input elements on the screen
    //used in createObje.create() to build the new object.

    public void onCreate(...){
      ...
      createObj = new CreateObj();
      myList = new MyList();

      currentObjList = MyList.getObjList();

      //puts list into recycler
      recyclerView = (RecyclerView) findViewById(R.id.recycler);
      recyclerView.setLayoutManager(new LinearLayoutManager(this,
         LinearLayoutManager.VERTICAL, false));

      adapter = new RecyclerAdapter(this, currentObjList);
      recyclerView.setAdapter(adapter);

      ...    

      aUserConfirmInputElement.setOnClickListener(new OnClickListener()){
          public void onClick(){
             Obj obj =  createObj.create();
             myList.addObjectToList(obj);

             adapter.notifyDataSetChanged();
          }
      }

      ...
}