2016-04-22 2 views
2

Я пытаюсь запустить этот Android код Xamarin:Xamarin Handler.Post не вызывает IRunnable.Run()

final Handler handler = new Handler(); 
handler.post(new Runnable() { 
    @Override 
    public void run() { 
    int hours = seconds/3600; 
    int minutes = (seconds%3600)/60; 
    int secs = seconds%60; 

    String time = String.format("%d:%02d:%02d", hours, minutes, secs); 
    timeView.setText(time); 
    if (running) { 
     seconds++; 
    } 
    handler.postDelayed(this, 1000); 
    } 
}); 

Я попробовал это в Xamarin;

Test newTest = new Test(this); 
Handler handler = new Handler(); 
handler.Post(newTest); 

класс Тест IRunnable как

public class Test : IRunnable 
{ 
    MainActivity activity; 
    public Test(MainActivity test) 
    { 
     activity = test; 
    } 

    public IntPtr Handle 
    { 
     get 
     { 
      return (IntPtr)0; 
     } 
    } 

    public void Dispose() 
    { 

    } 

    public void Run() 
    { 
     Console.WriteLine("-------------------->Run called<-----------------------"); 
     TextView stopWatch = activity.getTextView(); 
     int hour = activity.seconds/3600; 
     int minute = (activity.seconds % 3600)/60; 
     int sec = activity.seconds % 60; 

     string time = string.Format("%d:%02d:%02d", hour, minute, sec); 
     stopWatch.Text = time; 

     if (activity.running == true) 
     { 
      activity.seconds++; 
     } 

     Handler handler = new Handler(); 
     handler.PostDelayed(this, 1000); 
    } 
} 

Программа работает, но Handler не вызывая функцию Run(). Я новичок в Xamarin. Любые решения?

ответ

3

Это типичная ошибка. Подсказка скрыта в выводе сборки.

Тип 'App1.Test' реализует Android.Runtime.IJavaObject, но не наследует Java.Lang.Object. Он не поддерживается.

Everytime, вы реализовать интерфейс Java, вы должны наследовать от Java.Lang.Object.

public class Test : Java.Lang.Object, IRunnable 
{ 
    // ... 
} 
+0

Thank you.It работал. – Santosh