2012-12-26 5 views
2

필자는 드릴과 클래스를 확장 한 클래스가 있습니다 (예 : AddDrill). 필자는 작업 사이에이 드릴 개체 "패밀리"를 전달할 수 있기를 원합니다. 따라서 Parcelable을 사용하고 있습니다. this 대답과 this 예제를 발견했으며이 드릴 및 AddDrill 클래스를 만들었습니다. 제가 잘못 생각한 것 같습니다. 모든 것이 구현에 도움이 되었습니까? 드릴 :Android Parcelable and inheritance

package com.simplemathgame; 

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

public abstract class Drill implements Parcelable{ 
    protected int firstNumber; 
    protected int secondNumber; 
    protected int answer; 
    protected int userAnswer; 
    protected String userAnswerString; 
    protected String symbol; 
    protected int minBound, maxBound; 
    protected int drillNumber; 

    public String getUserAnswerString() { 
     return userAnswerString; 
    } 

    public void setUserAnswerString(String userAnswerString) { 
     this.userAnswerString = userAnswerString; 
    } 

    Drill(int min, int max){ 
     minBound = min; 
     maxBound = max; 
     answer = answerCalculatetion(); 
     userAnswerString = ""; 
    } 

    public Drill(Parcel in) { 
     readFromParcel(in); 
    } 

    public int getDrillNumber() { 
     return drillNumber; 
    } 

    public void setDrillNumber(int drillNumber) { 
     this.drillNumber = drillNumber; 
    } 

    public int getUserAnswer() { 
     return userAnswer; 
    } 

    public void setUserAnswer(int userAnswer) { 
     this.userAnswer = userAnswer; 
    } 

    public String getSymbol() { 
     return symbol; 
    } 

    public void setSymbol(String symbol) { 
     this.symbol = symbol; 
    } 

    public int getMinBound() { 
     return minBound; 
    } 

    public void setMinBound(int minBound) { 
     this.minBound = minBound; 
    } 

    public int getMaxBound() { 
     return maxBound; 
    } 

    public void setMaxBound(int maxBound) { 
     this.maxBound = maxBound; 
    } 

    //getters and setters 
    public int getFirstNumber() { 
     return firstNumber; 
    } 
    public void setFirstNumber(int firstNumber) { 
     this.firstNumber = firstNumber; 
    } 
    public int getSecondNumber() { 
     return secondNumber; 
    } 
    public void setSecondNumber(int secondNumber) { 
     this.secondNumber = secondNumber; 
    } 
    public int getAnswer() { 
     return answer; 
    } 
    public void setAnswer(int answer) { 
     this.answer = answer; 
    } 

    protected int getRandomNumber(int high, int low){ 
     return (int) ((Math.random() * (high - low + 1)) + low); 
    } 

    protected abstract int answerCalculatetion(); 

    protected String printDrill(){ 
     String FirstNumberS; 
     String SecondNumberS; 

     if(this.getFirstNumber() < 0){ 
      FirstNumberS = "(" + this.getFirstNumber() + ")"; 
     } 
     else{ 
      FirstNumberS = "" + this.getFirstNumber(); 
     } 

     if(this.getSecondNumber() < 0){ 
      SecondNumberS = "(" + this.getSecondNumber() + ")"; 
     } 
     else{ 
      SecondNumberS = "" + this.getSecondNumber(); 
     } 

     return (FirstNumberS + " " + this.getSymbol() + " " + SecondNumberS + " " + "="); 
    } 

    protected String printDrillAnswer(){ 
     String FirstNumberS; 
     String SecondNumberS; 
     String answerS; 

     if(this.getAnswer() < 0){ 
      answerS = "(" + this.getAnswer() + ")"; 
     } 
     else{ 
      answerS = "" + this.getAnswer(); 
     } 

     if(this.getFirstNumber() < 0){ 
      FirstNumberS = "(" + this.getFirstNumber() + ")"; 
     } 
     else{ 
      FirstNumberS = "" + this.getFirstNumber(); 
     } 

     if(this.getSecondNumber() < 0){ 
      SecondNumberS = "(" + this.getSecondNumber() + ")"; 
     } 
     else{ 
      SecondNumberS = "" + this.getSecondNumber(); 
     } 

     return (FirstNumberS + " " + this.getSymbol() + " " + SecondNumberS + " " + "=" + " " + answerS); 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 

     // We just need to write each field into the 
     // parcel. When we read from parcel, they 
     // will come back in the same order 
     dest.writeInt(firstNumber); 
     dest.writeInt(secondNumber); 
     dest.writeInt(answer); 
     dest.writeInt(userAnswer); 
     dest.writeString(userAnswerString); 
     dest.writeString(symbol); 
     dest.writeInt(minBound); 
     dest.writeInt(maxBound); 
     dest.writeInt(drillNumber); 
    } 

    /** 
    * 
    * Called from the constructor to create this 
    * object from a parcel. 
    * 
    * @param in parcel from which to re-create object 
    */ 
    protected void readFromParcel(Parcel in) { 

     // We just need to read back each 
     // field in the order that it was 
     // written to the parcel 

     firstNumber = in.readInt(); 
     secondNumber = in.readInt(); 
     answer = in.readInt(); 
     userAnswer = in.readInt(); 
     userAnswerString = in.readString(); 
     symbol = in.readString(); 
     minBound = in.readInt(); 
     maxBound = in.readInt(); 
    } 

} 

AddDrill :

package com.simplemathgame; 

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

public class AddDrill extends Drill { 

    AddDrill(int min, int max) { 
     super(min, max); 
     symbol = "+"; 
     firstNumber = getRandomNumber(min, max); 
     secondNumber = getRandomNumber(min, max); 
     answer = answerCalculatetion(); 
    } 

    private AddDrill(Parcel in) { 
     super(in); 
    } 

    protected int answerCalculatetion() { 
     return (this.getFirstNumber() + this.getSecondNumber()); 
    } 

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

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

    @Override 
    public int describeContents() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 
} 

주셔서 감사합니다 AddDrill 클래스에서

+0

하나의 인스턴스 만 있으면 충분합니다. 싱글 톤 클래스를 사용하여 달성 할 수 있습니다. – Talha

+1

"drillNumber"var에 데이터를 쓰고 있지만 읽지는 못한다는 것에주의하십시오 .. 이것은 역시 문제입니다 .. – Cata

답변

1

, 당신은 writeToParcel() 방법도 Parcel에서 생성자를 구현해야합니다. 두 가지 방법 모두에 대해 @Override을 사용해야 할 수도 있지만 최종 솔루션을 찾기 위해 실험해야합니다.