簡體   English   中英

如何使用Parcelable在活動之間傳遞對象的ArrayList?

[英]How to pass ArrayList of object between activities using Parcelable?

我想將對象的數組列表從一個活動發送到另一個活動。 為此,我使用Parcelable擴展了我的課程。

我仍然沒有得到名單。 我也發送了一個布爾變量,因為該變量的值也不會改變。

我的對象類:

public class contact implements Parcelable {

private String contactName;
private String contactId;

contact(){}

contact(String contactId,String contactName)
{
    this.contactId = contactId;
    this.contactName = contactName;

}

public contact(Parcel in) {

    contactId  = in.readString();
    contactName = in.readString();

}
public void writeToParcel(Parcel dest, int flags) {

    dest.writeString(contactId);
    dest.writeString(contactName);

}

public static final Parcelable.Creator<contact> CREATOR = new Parcelable.Creator<contact>()
{
    public contact createFromParcel(Parcel in)
    {
        return new contact(in);
    }
    public contact[] newArray(int size)
    {
        return new contact[size];
    }
};

public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

public String getContactName() {
    return contactName;
}

public void setContactName(String contactName) {
    this.contactName = contactName;
}

public String getContactid() {
    return contactId;
}

public void setContactid(String contactId) {
    this.contactId = contactId;
}

}

第一次活動:

   done.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {



            Log.d("selectd",String.valueOf(selectedItemsPositions));

            mContactListActivity = true;

            selectedContacts = new ArrayList<>();//to store selected items

            for (Integer pos : selectedItemsPositions) {
                selectedContacts.add(items.get(pos));
            }

            Intent i = new Intent();

            Bundle bundle = new Bundle();

            bundle.putParcelableArrayList("selectedContacts",selectedContacts);
            bundle.putBoolean("contactListActivity",mContactListActivity);

            i.putExtras(bundle);

            setResult(RESULT_OK, i);

           finish();


        }
    });

}

第二項活動:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == PICK_CONTACT_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {

            Intent i = new Intent();

            Bundle bundle = new Bundle();

            mSelectedContacts = bundle.getParcelableArrayList("selectedContacts");

            mContactListActivity = bundle.getBoolean("contactListActivity");

            if(mContactListActivity)
            {

                addOrganizer.setVisibility(View.INVISIBLE);

            }

            mAdapter.notifyDataSetChanged();

        }
    }
}

編輯:

按照sush的建議嘗試了此操作:

   Intent i = getIntent();

            Bundle bundle = i.getExtras();

            mSelectedContacts = (ArrayList<contact>)bundle.getSerializable("selectedContacts");

            mContactListActivity = bundle.getBoolean("contactListActivity",false);

然后,它在列表上引發空指針異常。

怎么了

更新:

     mContactListActivity = true;

            selectedContacts = new ArrayList<>();//to store selected items

            for (Integer pos : selectedItemsPositions) {
                selectedContacts.add(items.get(pos));
            }

            Intent i = new Intent(ContactList.this,PlanEventActivity.class);

            i.putExtra("contactListActivity",mContactListActivity);
            i.putExtra("selectedContacts",(Serializable)selectedContacts);

            setResult(RESULT_OK, i);

           finish();

第二項活動:

   Intent i = getIntent();


            mContactListActivity =  i.getBooleanExtra("contactListActivity",true);

mSelectedContacts =(ArrayList)i.getSerializableExtra(“ selectedContacts”);

            Log.e("mSelectedContact ", String.valueOf(mSelectedContacts));
            mAdapter.notifyDataSetChanged();

現在,我已完成此操作,現在布爾值已通過,但列表顯示為null。

     Bundle bundle = new Bundle(); // here ur creating new bundle and trying get data from empty bundle. 

 mSelectedContacts = bundle.getParcelableArrayList("selectedContacts"); 

     mContactListActivity = bundle.getBoolean("contactListActivity");








       Intent i = new Intent();

        Bundle bundle = new Bundle();

       /* bundle.putParcelableArrayList("selectedContacts",selectedContacts);
        bundle.putBoolean("contactListActivity",mContactListActivity);

        i.putExtras(bundle);
        */
       //try below code
        i.putParcelableArrayList("selectedContacts",selectedContacts);
        setResult(RESULT_OK, i);

為您的代碼

 as per your code you should go like this

     Bundle b = i.getExtras();

像這樣嘗試

Intent updateIntent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.getParcelableArrayList("selectedContacts", selectedContacts);
updateIntent.putExtra(ContactsActivity.RECIVED_CONTACT, bundle);
startActivityForResult(updateIntent,1);

然后在Second Activity的onActivityResult方法上獲取

Bundle bundle = getIntent().getBundleExtra(ContactsActivity.RECEIVED_CONTACT);
ArrayList<contact> contact = bundle.getParcelableArrayList("selectedContacts");

這是問題所在:您在第二個Activity中沒有變得笨拙,正在初始化一個新的捆綁包,因此您將獲得null:

在第二個活動中:

           Bundle bundle =getIntent().getBundle();

            mSelectedContacts = bundle.getParcelableArrayList("selectedContacts");

            mContactListActivity = bundle.getBoolean("contactListActivity");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM