在我的应用程序中,我创建了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。
答案 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();
}
}
...
}