0

私は奇妙な問題を抱えています。あるアクティビティから別のアクティビティに 2 つの parcable クラスを渡そうとしています。どちらもまったく同じ方法で定義しますが、どちらも null です。

パーケーブル クラス :

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);

両方のループが実行されています (ログを見ることができます)。表示されないすべての変数は正しく初期化されています。すべて問題ありません。

受信部分: 私は両方を 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 が null でないのに、selectedFriends が null になる理由を知っている人はいますか?

編集: 考えただけですが、バンドルに 2 つのパーケーブルを入れたからでしょうか? 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 に答える