从另一个活动编辑数组

时间:2015-09-08 19:47:17

标签: java android arrays

尝试从另一个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)

1 个答案:

答案 0 :(得分:2)

两个问题:

1

您无法实例化活动:

new MainActivity();

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

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

2

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

的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() );
    }    
}