2016-04-15 14 views
0

MyActivityintMyViewから取得しようとしています。私の活動では、私は次のようしている:アクティビティとビューの間のインターフェイスの実装でエラーが発生しました

public class MyActivity extends AppCompatActivity implements MyView.GetCallBack { 

    final MyActivity context = this; 
    private AsyncTask<Void, Void, Void> task; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_second_act); 

     task = new myTask(); 
     task.execute(); 

    } 

    @Override 
    public void onPercentageReceived(int msg){ 
     // you have got your msg here. 
    } 

    public class MyTask extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 
     @Override 
     protected Void doInBackground(Void... params) { 
     } 
     @Override 
     protected void onPostExecute(Void result) { 

      LinearLayout surface = (LinearLayout) findViewById(R.id.surfaceView); 
      surface.addView(new MyView(getApplicationContext())); 
      surface.setBackgroundColor(Color.BLACK); 
     } 

    } 

MyViewは、次のコードが含まれています

public class MyView extends View { 
    final MyView context = this;  
    private GetCallBack callback; 
    // Constructor 
    public PlacingBoxView(Context context) { 
     super(context); 
     callback = (GetCallBack) context; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     dataPercentage(Percentage); 
    } 

    public void dataPercentage(int Percentage){ 
     callback.onPercentageReceived(Percentage); 
    } 


    public interface GetCallBack{ 
     void onPercentageReceived(int msg); 
    } 

私は問題なくコードをコンパイルすることができますが、LogCatに、私は以下の間違いを得る:

致命的除外:メイン プロセス:com.example.ex、PID:8035 java.lang.ClassCastException:android.app.Appliカチオンはcom.example.ex.myViewでcom.example.ex.myView $ GetCallBack に をキャストすることはできません。(myView.java:49)

私はエラーがコンテキストに関連しているけど、私まだそれを修正する方法を見つけていない、

本当にありがとう! :)

答えて

1

myActivityinterfaceを実装しましたが、アプリケーションコンテキストを渡しています。だからあなたはClassCastExceptionになっています。 myActivity.thisを渡すので、このようにしてみてください:

surface.addView(new MyView(MyActivity.this); 
+0

首都を変更;) – Alvaro

+0

'myView'もMyView''に変更する必要があります。 –

関連する問題