从另一个活动编辑数组

当尝试从另一个Activity编辑自定义arraylist ,应用程序强制关闭。

MainActivity Arraylist:

 ArrayList contacts = new ArrayList(); 

另一项Activity

 MainActivity main = new MainActivity(); main.contacts.get(position).contactname=x; main.contacts.get(position).contactnumber=x; 

如何编辑其他活动的arraylist?

logcat的:

 09-08 22:53:40.415 1760-1760/com.example.amir_p.contacts E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.amir_p.contacts, PID: 1760 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {com.example.amir_p.contacts/com.example.amir_p.contacts.ContactInfo}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at android.app.ActivityThread.deliverResults(ActivityThread.java:3577) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3620) at android.app.ActivityThread.access$1300(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5257) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at com.example.amir_p.contacts.ContactInfo.onActivityResult(ContactInfo.java:53) at android.app.Activity.dispatchActivityResult(Activity.java:6192) at android.app.ActivityThread.deliverResults(ActivityThread.java:3573) 

两个问题:

1

您无法实例化活动:

 new MainActivity(); 

必须从Intent启动活动,如下所示:

 thisActivity.startActivity( new Intent( NextActivity.class ) ); 

2

如果您希望两个活动共享一个列表,那么您必须在更大的范围内实例化该列表,例如通过创建自定义应用程序类或创建单例来实现应用程序范围。

辛格尔顿:

 public final class MySingleton { private static final MySingleton SELF = new MySingleton(); private List contacts = new ArrayList(); private boolean didContacts private MySingleton() { // Don't want anyone else constructing the singleton. } public static MySingleton getInstance() { return SELF; } public List getContacts() { return contacts; } } 

现在,在您喜欢的任何活动中,您都可以获得列表

 MySingleton.getInstance().getContacts() 

小心并发修改。

由于评论请求而修改

评论中指出,您希望将一项活动与另一项活动进行更改。 你必须意识到一次只有一个活动是活跃的,所以你不应该这样做,无论你是否可以破解它。 我通常会推荐一个监听器,但是听众不会在这种情况下工作,因为只有一个Activity另一种方法是让一些内存状态存在于活动之外(可能是单例)活动可以响应它们重新获得关注。

伪代码

 ActivityB { onClick() { MySingleton.getInstance().getContacts().add( theContact ); } } ActivityA { onResume() { // consider contacts may have changed and redraw listViewAdapter.clear(); listViewAdapter.addAll( MySingleton.getInstance().getContacts() ); } }