尝试从另一个arraylist
编辑自定义Activity
时,应用程序部队已关闭。
MainActivity
中的Arraylist:
ArrayList<Contacts> contacts = new ArrayList<Contacts>();
另一个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)
答案 0 :(得分:2)
两个问题:
您无法实例化活动:
new MainActivity();
必须从Intent启动活动,如下所示:
thisActivity.startActivity( new Intent( NextActivity.class ) );
如果您希望两个活动共享一个列表,那么您必须在更大的范围内实例化该列表,例如通过创建自定义应用程序类或创建单例来实现应用程序范围。
的Singleton:
public final class MySingleton {
private static final MySingleton SELF = new MySingleton();
private List<Contacts> contacts = new ArrayList<Contacts>();
private boolean didContacts
private MySingleton() {
// Don't want anyone else constructing the singleton.
}
public static MySingleton getInstance() {
return SELF;
}
public List<Contacts> 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() );
}
}