2016-01-20 2 views
0

Для того, чтобы реализовать наручные часы для Android, я использую CanvasWatchFaceService. Это использует Engine, что делает изменения на холсте. Образец кода приведен ниже:Вызов расширенного внутреннего класса другого класса?

public class WatchFace extends CanvasWatchFaceService { 

    @Override 
    public MyEngine onCreateEngine() { 
     return new MyEngine(); 
    } 

    private class MyEngine extends CanvasWatchFaceService.Engine { ... } 
    // The above line is basically: 
    // private class MyEngine extends WatchFace.Engine { ... } 
} 

Предположим, что я хочу иметь несколько CanvasWatchFaceService классы, которые используют только один Engine. Это связано с тем, что код в пределах Engine можно использовать повторно для моей цели.

Как это возможно? Кажется, я не могу извлечь MyEngine самостоятельно, так как экземпляр экземпляра типа CanvasWatchFaceService должен быть в области. По той же причине также не может быть статичным.

Что было бы лучшим способом подойти к этой проблеме?

---------------------------- ОБНОВЛЕНИЕ: ---------------- ----------- Вот что я сделал до сих пор, что не дает мне ошибку синтаксиса:

public class WatchFace2 extends CanvasWatchFaceService { 

    @Override 
    public WatchFace.MyEngine onCreateEngine() { 
     return new WatchFace(WatchFace2.this).onCreateEngine(); 
    } 

} 

, и добавил застройщик для WatchFace, который принимает в данном CanvasWatchFaceService в качестве контекста , необходимый для внутренней работы MyEngine.

Это нормально, но есть семантические ошибки относительно getPackageName(). Ошибка не показывает перерыв в любой строке моего кода.

+0

Я думаю, что я имею в виду, если у меня есть еще один 'открытого класса WatchFace2 простирается CanvasWatchFaceService', я хочу, чтобы вернуть экземпляр выше' MyEngine' от его ' onCreateEngine() 'тоже. – NeilDA

+0

Я пробовал это: назвал новый WatchFace (Watchface2.this) .onCreateMethod() из другого класса Watchface2. Я получаю ошибки из класса MyEngine относительно получения имени пакета. Пробовал отправить экземпляр WathFace2 в качестве конструктора, но не повезло. – NeilDA

ответ

0
public class WatchFace extends CanvasWatchFaceService { 

    @Override 
    public MyEngine onCreateEngine() { 
     return new MyEngine(); 
    } 

    private class MyEngine extends CanvasWatchFaceService.Engine { ... } 
    // The above line is basically: 
    // private class MyEngine extends WatchFace.Engine { ... } 
} 

затем продлить WatchFace

public class WatchFace1 extends WatchFace{ 
} 

public class WatchFace2 extends WatchFace{ 
} 
+0

WatchFace.this нельзя ссылаться на статический контекст. – NeilDA

+0

вся суть ключевого слова «private» заключается в том, что она не видна из других классов – discipliuned

+0

, если я не ставил MyEngine(), я не могу ссылаться на нее напрямую. Но если я сделаю это статическим, у него не будет закрытого типа CanvasWatchFaceService – NeilDA

Смежные вопросы