холст во внутреннем классе, андроид - PullRequest
1 голос
/ 26 ноября 2011

Возможно ли иметь класс, расширяющий SurfaceView внутри класса деятельности в качестве внутреннего класса? Как то так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.android.iiProject.Presentation.DrawCanvas
android:id="@+id/SurfaceView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>

Где Presentation - это класс активности, а DrawCanvas - это класс, расширяющий SurfaceView, и объект DrawCanvas вызывается из действия Presentation.

Я хочу, чтобы это было так, потому что я хочу иметь доступ к методам и переменным, доступным из действия Presentation, и я не хочу объявлять их как статические для доступа к ним из другого класса, так как это заставляет меня много дополнительных проблем ...! Таким образом, это дает мне classNotFoundException в XML-файле

Большое спасибо заранее

1 Ответ

4 голосов
/ 26 ноября 2011

Да, это возможно, вам просто нужно обратиться к своему внутреннему классу иначе, чем в XML, например:

<view
  class="com.yourpackage.YourOuterClass$YourInnerClass" 
  ...
  />

Цитата:

Пользовательский компонент создается как общий вид в XML, а класс указывается с использованием полного пакета. Обратите внимание, что внутренний класс, на который мы определились, ссылается с помощью NoteEditor $ MyEditText нотация, которая является стандартным способом ссылки на внутренние классы в Java язык программирования. Если ваш пользовательский компонент View не определен как внутренний класс, то вы можете, в качестве альтернативы, объявить представление компонент с именем элемента XML и исключающий атрибут класса.

См. изменение существующего типа представления , точка 4.

...