0

我有一个奇怪的问题。我正在尝试将 2 个 parcable 课程从一项活动传递到另一项活动。我以完全相同的方式定义它们,但它们是空的。

可解析类:

class Friends implements Parcelable {
private ArrayList<Integer> ids = new ArrayList<Integer>();

private ArrayList<String> names = new ArrayList<String>();
private ArrayList<Bitmap> images = new ArrayList<Bitmap>();

public void addId(Integer id)
{
    ids.add(id);
}
public void addName(String name){
    names.add(name); 
}

public void addImage(Bitmap img){
    images.add(img);
}
public ArrayList<Integer> getIds() {
    return ids;
}

public ArrayList<String> getNames() {
    return names;
}
public ArrayList<Bitmap> getImages() {
    return images;
}
@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeList(ids);
    dest.writeList(names);
    dest.writeList(images);

}
  public static final Parcelable.Creator<Friends> CREATOR = new Parcelable.Creator<Friends>() {
        public Friends createFromParcel(Parcel in) {
            return new Friends(in);
        }
        public Friends[] newArray(int size) {
            return new Friends[size];
        }
    };
public Friends(Parcel in){
 in.readList(ids, null);
 in.readList(names, null);
 in.readList(images, null);
}
public Friends(Integer id, String name, Bitmap img) {
    ids.add(id);
    names.add(name);
    images.add(img);
}
public Friends(){

}

发送部分:

          for(Integer position : selectedIds)
      {

            String name = a.getItem(position).getFriendName();
            int id = a.getItem(position).getFriendId();
            Bitmap img = a.getItem(position).getFriendImage();
            Log.e("ID",String.valueOf(id));
            selectedFriends.addId(new Integer(id));
            selectedFriends.addName(name);
            selectedFriends.addImage(img);



      }
      for(int position=0;position<list.getCount(); position++)
      {
            String name = a.getItem(position).getFriendName();
            int id = a.getItem(position).getFriendId();
            Bitmap img = a.getItem(position).getFriendImage();
            Log.e("All IDs",String.valueOf(id));
            allFriends.addId(new Integer(id));
            allFriends.addName(name);
            allFriends.addImage(img);
      }
      b.putParcelable("selecet_friends", selectedFriends);
      b.putParcelable("all_friends", allFriends);
      data.putExtras(b);

两个循环都在运行(我可以看到日志),所有你看不到的变量都被正确初始化,一切都很好。

Reciving 部分: 我将两者都定义为 null :

    private Friends selectedFriends = null;
private Friends allFriends = null;

并像这样处理 onResult :

                Log.e("Result","yessss");
            Friends all_friends = (Friends)data.getParcelableExtra("all_friends");
            Friends selected_friends = (Friends)data.getParcelableExtra("selected_friends");
            allFriends = all_friends;
            selectedFriends = selected_friends;
            if(selectedFriends != null){
                Log.e("is null","No");
            }
            if(allFriends != null){
                Log.e("is all null","No");
            }

有谁知道当 allFriends 不是时 selectedFriends 为何为空?

编辑: 只是一个想法,但也许是因为我将 2 个 parcables 放在一个 Bundle 上?只是我只是添加了 2 个捆绑包?

4

1 回答 1

1

在发送方法中,您在此行中有错字:

b.putParcelable("selecet_friends", selectedFriends);

试试这个:

b.putParcelable("selected_friends", selectedFriends);

此外,您应该为键使用更具体的名称。putExtras() 的文档说:

向意图添加一组扩展数据。键必须包含包前缀,例如应用程序 com.android.contacts 将使用类似“com.android.contacts.ShowAll”的名称

于 2012-05-10T16:20:05.877 回答