2016-04-15 27 views
0

我试图从视图MyView中获取我的MyActivityint。在我的活动我有以下几点:活动和视图之间的接口的实现错误

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中我得到以下错误:

致命例外:main 进程:com.example.ex,PID:8035 java.lang.ClassCastException:android.app.Appli阳离子不能被转换 到com.example.ex.myView $ GetCallBack 在com.example.ex.myView。(myView.java:49)

我知道错误与环境相关的,但我还没有找到一种方法来纠正它,

任何想法将非常感激! :)

回答

1

您已在myActivity中实施interface,但您正在传递应用程序上下文。这就是为什么你得到ClassCastException。通过myActivity.this,所以尝试这样的:

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

改变了资本;) – Alvaro

+0

'myView'也应改为'MyView'。 –