2011-09-30 3 views
0
에서 나는 내가 다른 클래스에 이러한 데이터를 전달하려면 내가 잘못 뭘하는지 묻고 싶습니다

그렇게 풀고 그것을 시도 :전달 벡터 안드로이드

package com.mbar; 

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

public class Pack implements Parcelable { 
Class<?>[] classes; 
String [] codes; 

public void eat(Class<?>[] classes,String [] codes){ 
    this.classes = classes; 
    this.codes = codes; 
} 
public Class<?>[] getClasses(){ 
    return this.classes; 
} 
public String [] getNames(){ 
    return this.codes; 
} 
@Override 
public int describeContents() { 
    // TODO Auto-generated method stub 
    return 0; 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 
} 
} 
+1

잘 Parcelable의 구현을 읽거나 쓰지 말아라. 그래서 ... 클래스와 코덱이 null 인 이유 – Selvin

+0

... 내 첫 번째 (삭제 된) 주석에 쓴 것은 클래스이다. writeToParcel에 클래스 fullname을 작성하고 생성자 Pack (Parcel)에서 클래스 문 스트링을 읽고 class.forName (classnamestring)을 사용하여 클래스 배열을 다시 작성해야합니다. – Selvin

답변

1
String [] codes = {"code"}; 
Class<?> [] classes = { TestActivity.class }; 



    Intent i = new Intent(); 
    Pack p = new Pack(classes,codes); 
    i.putExtra("com.mbar", p); 
    i.setClass(this, CaptureActivity.class); 
    startActivity(i) 

Pack p = (Pack)getIntent().getParcelableExtra("com.mbar"); 
if(p!=null){ 
classes = p.getClasses(); 
codes = p.getNames(); 

public static class Pack implements Parcelable { 
    Class<?>[] classes; 
    String[] codes; 

    public Pack(Class<?>[] classes, String[] codes) { 
     this.classes = classes; 
     this.codes = codes; 
    } 

    public Pack(Parcel in) { 
     int len = in.readInt(); 
     String[] classnames = new String[len]; 
     in.readStringArray(classnames); 
     classes = new Class<?>[classnames.length]; 
     for (int i = 0; i < classnames.length; i++) { 
      try { 
       classes[i] = Class.forName(classnames[i]); 
      } catch (ClassNotFoundException e) { 
      } 
     } 
     len = in.readInt(); 
     codes = new String[len]; 
     in.readStringArray(codes); 
    } 

    public Class<?>[] getClasses() { 
     return this.classes; 
    } 

    public String[] getNames() { 
     return this.codes; 
    } 

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

    public static final Parcelable.Creator<Pack> CREATOR = new Parcelable.Creator<Pack>() { 
     public Pack createFromParcel(Parcel in) { 
      return new Pack(in); 
     } 

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

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     String[] classnames = new String[classes.length]; 
     for (int i = 0; i < classes.length; i++) { 
      classnames[i] = classes[i].getName(); 
     } 
     dest.writeInt(classnames.length); 
     dest.writeStringArray(classnames); 
     dest.writeInt(codes.length); 
     dest.writeStringArray(codes); 
    } 
} 
01 :

Bundle b = getIntent().getExtras(); 
Pack p = (Pack)b.getParcelable("com.mbar"); 
if(p!=null){ 
classes = p.getClasses(); 
codes = p.getNames(); 

Parcelable 인 팩 클래스의 모습

관련 문제