Android 如何在ExpandableListView中的onChildClick中将整个对象传递给intent

Android 如何在ExpandableListView中的onChildClick中将整个对象传递给intent,android,object,onclick,onclicklistener,expandablelistview,Android,Object,Onclick,Onclicklistener,Expandablelistview,在GridView或simple ListView中,我使用以下代码将一个对象传递给一个新的活动,它工作正常: gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

在GridView或simple ListView中,我使用以下代码将一个对象传递给一个新的活动,它工作正常:

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Illusion i = (Illusion) parent.getItemAtPosition(position);
            Intent intent = new Intent(IllusionsGridActivity.this, ViewIllusionActivity.class);
            intent.putExtra("item", i);
            startActivity(intent);
        }
    });
有没有办法将整个对象传递给此方法中的新活动?

请尝试下一个代码:

listView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
    @Override
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
        long packedPosition = ExpandableListView.getPackedPositionForChild(groupPosition, childPosition);
        int flatPosition = parent.getFlatListPosition(packedPosition)
        Illusion i = (Illusion) parent.getItemAtPosition(flatPosition);
        Intent intent = new Intent(IllusionsListActivity.this, ViewIllusionActivity.class);
        intent.putExtra("item", i);
        startActivity(intent);
        return false;
    }
});
尽量使用可包裹的

在第一次行动中

Illusion i = (Illusion) parent.getItemAtPosition(position);
Intent in = new Intent(IllusionsGridActivity.this,ViewIllusionActivity.class);
in.putExtra("key", i);
startActivity(in);
在第二次行动中

Intent intent = getIntent();
User usr = (User) intent.getParcelableExtra("key");
在幻觉课上

import android.os.Parcel;
import android.os.Parcelable;

public class User implements Parcelable {

    private long exampleValueLong;
    private int exampleValueInt;
    private String exampleValueString;
    private boolean exampleValueBool; 

    public User(){}

    // all getters and setters go here //...


    @Override
    public int describeContents() {
      // ignore for now
    return 0;
    }

    @Override
    public void writeToParcel(Parcel pc, int flags) {
        pc.writeLong(exampleValueLong);
        pc.writeInt(exampleValueInt);
        pc.writeString(exampleValueString);
        pc.writeInt( exampleValueBool ? 1 :0 );
   }

    public static final Parcelable.Creator<User> CREATOR = 
        new Parcelable.Creator<Illusion>() {

         public Illusion createFromParcel(Parcel pc) {
             return new Illusion(pc);
         }

         public Illusion[] newArray(int size) {
             return new Illusion[size];
         }
   };

   public Illusion(Parcel pc){
       exampleValueLong = pc.readLong();
       exampleValueInt  =  pc.readInt();
       exampleValueString  = pc.readString();
       exampleValueBool= ( pc.readInt() == 1 );
  }
}
导入android.os.packet;
导入android.os.Parcelable;
公共类用户实现了Parcelable{
私人long示例ValueLong;
私有int-exampleValueInt;
私有字符串示例ValueString;
私有布尔示例ValueBool;
公共用户(){}
//所有的能手和二传手都到这里来。。。
@凌驾
公共int描述内容(){
//暂时忽略
返回0;
}
@凌驾
公共无效写入包裹(包裹pc,内部标志){
pc.writeLong(例如valuelong);
pc.writeInt(exampleValueInt);
pc.writeString(例如ValueString);
pc.writeInt(例如ValueBool?1:0);
}
公共静态最终包裹。创建者=
新建Parcelable.Creator(){
公共包裹(包裹pc){
返回新幻觉(pc);
}
公共数组(整数大小){
返回新的幻觉[大小];
}
};
公众幻觉(包裹pc){
示例ValueLong=pc.readLong();
exampleValueInt=pc.readInt();
exampleValueString=pc.readString();
例如valuebool=(pc.readInt()==1);
}
}

是否要传递自定义类或子视图?如果要传递自定义类的对象,目标活动将使用其属性在ImageView和TextView中显示它们。检索对象是否有问题?还是别的什么?谢谢你的回复,这肯定会有作用,但只适用于项目的默认顺序;当划分为类别时,它会显示不正确的数据。(你知道我的意思吗?这对我来说很难解释,因为我真的不知道你的代码应该如何工作。)哦,等等,我修复了这个listview使用的适配器,现在看起来它确实工作了!谢谢,我的幻觉类已经实现为Parcelable,我想问题不在这里
import android.os.Parcel;
import android.os.Parcelable;

public class User implements Parcelable {

    private long exampleValueLong;
    private int exampleValueInt;
    private String exampleValueString;
    private boolean exampleValueBool; 

    public User(){}

    // all getters and setters go here //...


    @Override
    public int describeContents() {
      // ignore for now
    return 0;
    }

    @Override
    public void writeToParcel(Parcel pc, int flags) {
        pc.writeLong(exampleValueLong);
        pc.writeInt(exampleValueInt);
        pc.writeString(exampleValueString);
        pc.writeInt( exampleValueBool ? 1 :0 );
   }

    public static final Parcelable.Creator<User> CREATOR = 
        new Parcelable.Creator<Illusion>() {

         public Illusion createFromParcel(Parcel pc) {
             return new Illusion(pc);
         }

         public Illusion[] newArray(int size) {
             return new Illusion[size];
         }
   };

   public Illusion(Parcel pc){
       exampleValueLong = pc.readLong();
       exampleValueInt  =  pc.readInt();
       exampleValueString  = pc.readString();
       exampleValueBool= ( pc.readInt() == 1 );
  }
}