2014-09-15 1 views
1

안녕하세요 다음과 같은 활동에 조각에서 개체를 전달하려고 :공유 Parcelable 객체

Intent intent = getIntent(); 
Bundle bundle = intent.getExtras(); 
company = bundle.getParcelable("company"); 

그리고 내가 시도 :

Bundle bundle1 = new Bundle(); 
bundle1.putParcelable("company", companies.get(i)); 
Intent intent = new Intent(getActivity(), CompanyInfoActivity.class); 
intent.putExtras(bundle1); 
getActivity().startActivity(intent); 

그리고 활동에

내가 다음에 할

Intent intent = new Intent(getActivity(), CompanyInfoActivity.class); 
      intent.putExtra("company",companies.get(i)); 
      getActivity().startActivity(intent); 

및 활동 내역 :

Intent intent = getIntent(); 
    company = intent.getParcelableExtra("company"); 
    tvName.setText(company.getName()); 

그리고 company은 내가 얻은 후 null 입력란을 사용합니다. 내가 보낸 객체가 null 필드가 아니라고 확신합니다.

내 Company.class

public class Company implements Parcelable { 

private int uid; 
@SerializedName("field_user_org_name_value") 
private String name; 
@SerializedName("field_user_org_address_value") 
private String address; 
@SerializedName("field_user_org_category_tid") 
private int category; 
@SerializedName("field_user_org_town_tid") 
private int cityId; 
@SerializedName("image") 
private String imageUrl; 
private int online; 
@SerializedName("field_user_org_description_value") 
private String description; 
@SerializedName("field_user_org_phone_value") 
private String mobPhone; 
@SerializedName("field_user_org_stac_phone_value") 
private String phone; 

double lat; 
double lng = 0; 
double distance; 


public double getDistance() { 
    return distance; 
} 

public void setDistance(double distance) { 
    this.distance = distance; 
} 

public double getLng() { 
    return lng; 
} 

public void setLng(double lng) { 
    this.lng = lng; 
} 

public double getLat() { 
    return lat; 
} 

public void setLat(double lat) { 
    this.lat = lat; 
} 

public String getDescription() { 
    return description; 
} 

public String getMobPhone() { 
    return mobPhone; 
} 

public String getPhone() { 
    return phone; 
} 

public int getOnline() { 
    return online; 
} 


public Company(int id, String name, String address, int category, int cityId, String imageUrl, int online, String description, String mobPhone, String phone, Double lat, Double lng, Double distance) { 
    this.uid = id; 
    this.name = name; 
    this.address = address; 
    this.category = category; 
    this.cityId = cityId; 
    this.imageUrl = imageUrl; 
    this.online = online; 
    this.description = description; 
    this.mobPhone = mobPhone; 
    this.phone = phone; 
    this.lat = lat; 
    this.lng = lng; 
    this.distance = distance; 
} 

public Company(Parcel in) { 
    in.writeInt(uid); 
    in.writeString(name); 
    in.writeString(address); 
    in.writeInt(category); 
    in.writeInt(cityId); 
    in.writeString(imageUrl); 
    in.writeInt(online); 
    in.writeString(description); 
    in.writeString(mobPhone); 
    in.writeString(phone); 
    in.writeDouble(lat); 
    in.writeDouble(lng); 
    in.writeDouble(distance); 

} 

public int getUid() { 
    return uid; 
} 

public String getName() { 
    return name; 
} 

public String getAddress() { 
    return address; 
} 

public int getCategory() { 
    return category; 
} 

public int getCityId() { 
    return cityId; 
} 

public String getImageUrl() { 
    return imageUrl; 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(uid); 
    dest.writeString(name); 
    dest.writeString(address); 
    dest.writeInt(category); 
    dest.writeInt(cityId); 
    dest.writeString(imageUrl); 
    dest.writeInt(online); 
    dest.writeString(description); 
    dest.writeString(mobPhone); 
    dest.writeString(phone); 
    dest.writeDouble(lat); 
    dest.writeDouble(lng); 
    dest.writeDouble(distance); 

} 

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 

    @Override 
    public Object createFromParcel(Parcel source) { 
     return new Company(source); 
    } 

    @Override 
    public Object[] newArray(int size) { 
     return new Company[size]; 
    } 
}; 


public static class CustomComparator implements Comparator<Company> { 
    @Override 
    public int compare(Company o1, Company o2) { 
     return o1.getName().compareTo(o2.getName()); 
    } 
} 

public static class CustomComparatorDistance implements Comparator<Company> { 
    @Override 
    public int compare(Company o1, Company o2) { 
     return Double.compare(o1.getDistance(), o2.getDistance()); 
    } 
} 

}

당신은 당신의 조각과 활동 사이에서 통신 할 수있는 수신기를 만들 수 있습니다
+0

http://developer.android.com/training/basics/fragments/communicating.html –

+0

나는이 알고 있지만 그것은 활동과 조각 사이에 COMUNICATION되지 않습니다. –

+0

어쩌면 serializable을 시도해보십시오 –

답변

2

public Company(Parcel in) { 
    in.writeInt(uid); 
    in.writeString(name); 
    in.writeString(address); 
    in.writeInt(category); 
    in.writeInt(cityId); 
    in.writeString(imageUrl); 
    in.writeInt(online); 
    in.writeString(description); 
    in.writeString(mobPhone); 
    in.writeString(phone); 
    in.writeDouble(lat); 
    in.writeDouble(lng); 
    in.writeDouble(distance); 

} 

당신은 소포의 값을 읽어야

uid = in.readInt(); 

에를
+0

고맙습니다. 바로 당신입니다. –

-2

:

public interface CompanyListener 
{ 
    public void sendCompany(Company company); 
} 

다음, 당신의 조각에 당신은 만들 필요가 이 청취자의 인스턴스

private CompanyListener companyListener; 
@Override 
public void onAttach(Activity activity) 
{ 
    super.onAttach(activity); 
    this.companyListener = (YourActivity) activity; 
} 

@Override 
public void onDetach() 
{ 
    super.onDetach(); 
    this.companyListener = null; 
} 

지금 당신은 당신의 활동을 구현해야 다음 OnAttach에서

당신은 그것을 인스턴스화하고 OnDetach에서 그것을 uninstantiate해야합니다.

또한 당신이 Otto library from Square를 사용할 수 있지만, 코드의이 작품에서 더 복잡 :

+0

당신의 대답에 빼기를 설정하고 싶지는 않지만 제 질문을 더 많이 읽으십시오. 조각에서 새로운 sctivity를 시작하여 데이터를 전달하고 싶습니다. –

1

구현에 문제가 있습니다.- 특히 당신의 Parcel 생성자 :

public Company(Parcel in) { 
    in.writeInt(uid); 
    in.writeString(name); 
    ... 
} 

당신이 작성하는 필드 생성자에서 Parcel합니다. 이것은 당신이 Parcel에서 데이터를으로 읽어 들여야하는 지점입니다. 예를 들어 :

public Company(Parcel in) { 
    uid = in.readInt(); 
    name = in.readString(); 
    ... 
} 
+1

고맙습니다. 맞습니다,하지만 Aleksandr Zhak이 답변을 1 분 빨리 작성했습니다. –