2013-08-29 5 views
0

"Player"라는 클래스를 만들었습니다.인 텐트 간의 ArrayList 클래스 전달

버튼을 클릭 할 때마다 새 TextView가 생성되고 새 Player 클래스가 생성됩니다. 다음 코드입니다.

private TextView createNewTextView (String text){ 
    final LayoutParams lparams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    final TextView newTextView = new TextView(this); 

    newTextView.setLayoutParams(lparams); 
    newTextView.setText(text); 

    Player newPlayer = new Player(); 
    newPlayer.name = text; 
    newPlayer.score = 0; 
    players.add(newPlayer); 
    zacniIgro.putExtra("players", (ArrayList<Player>) players); 
    return newTextView; 
} 

올바른 방법입니까? 단추 하나를 클릭 할 때마다 "newPlayer"레이블 아래에 새로운 플레이어가 추가되기 때문에 작은 결함이 있다고 생각합니다. 이 문제를 어떻게 해결할 수 있습니까?

그리고 내 주요 문제는 이것입니다. 두 번째 작업에서 ArrayList를 "압축 해제"하면 ArrayList의 각 요소를 조작 할 수 있습니까? getStringArrayListExtra()를 시도했지만 작동하지 않습니다. 나 또한 getExtras()를 시도했지만 번들을 검색하므로 작동하지 않습니다. 아니면 올바른 방법일까요? 하지만 그 묶음으로 무엇을 할 수 있습니까?

+1

시도, 또는 다른 방법은 google의 gson api를 사용하고 개체를 JSONObjects 문자열 형식으로 변환하고 JSONArray를 String 형식으로 보냅니다. 귀하의 활동 사이에 있으므로 대상 활동에서 gson api로 JSONArray를 쉽게 파싱합니다 – Houcine

답변

1

"레이블"newPlayer은 메소드가 실행될 때마다 항상 다른 변수 인 로컬 변수의 이름이므로 여기서는 아무런 문제가 없습니다.

여기에서 putExtra()으로 전화 할 때 playersSerializable으로 해석되므로 해당 전화는 getSerializableExtra("players")입니다. 결과는 ArrayList<Player>으로 캐스팅되어야합니다.

이 작업을 수행하려면 추가로 Player 클래스를 직렬화 가능해야합니다. 여기서 인터페이스 Serializable을 구현할 수 있습니다.

0

더 좋은 방법은 Parcelable입니다.

간단한 예 :

intent.putParcelableArrayListExtra("Key", YourObject); 

다른 화면으로 활용하려면 다음 :

public class Device implements Parcelable { 

private String name; 
private String hash; 

/** 
* Default private constructor. 
*/ 
public Device() { 

} 

public Device(final Parcel parcel) { 
    super(); 

    readFromParcel(parcel); 
} 

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

    @Override 
    public Device createFromParcel(final Parcel source) { 
     return new Device(source); 
    } 

    @Override 
    public Device[] newArray(final int size) { 
     return new Device[size]; 
    } 
}; 

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

@Override 
public void writeToParcel(final Parcel parcel, final int flags) { 
    parcel.writeString(name); 
    parcel.writeString(hash); 
} 

private void readFromParcel(final Parcel parcel) { 
    this.name = parcel.readString(); 
    this.hash = parcel.readString(); 
} 

이 같은 의도에서 개체를 넣어`Parceable`을 구현하기 위해

Intent intent = getIntent(); 
intent.getParcelableArrayExtra("key");