Intereting Posts
Как узнать идентификаторы или имена предварительно загруженных системных чертежей (растровые изображения) из дампа памяти Почему я не могу загрузить AVD из Eclipse с 1024 МБ ОЗУ? Идентификатор ресурса не найден для атрибута fontFamily в пакете android Использование JavaCV и Realm вместе вызывает «java.lang.UnsatisfiedLinkError» Android-данные выделяются в прядильщике, но при выборе не отображается значение в прядильщике Как буферизовать только последнюю эмиссию от rx.Обслуживать во время противодавления Почему три (избыточный?) Вариации акселерометра в датчиках андроида Настройка приложения на facebook Ошибка: «Приложение неправильно настроено для входа в Facebook». Перечисление папок и файлов с помощью Google Drive SDK V2 Android 4.0 development – onMenuItemSelected (int, Menu) Разработка плагина Cordova – добавление aar Нажатие busybox в Android-эмулятор Android как отправлять и получать изображение и местоположение (используя карту) в групповом чате с помощью xmpp-smack Сравнение строк в привязке данных Android Android – получить изображение профиля facebook

Внедрение расширенного / настраиваемого представления throws NoSuchMethod для конструктора

У меня есть настраиваемый TextView, который реализует три конструктора View (nb, это мой первый удар в приложении Android):

public class DynamicGeometryTextView extends TextView { public DynamicGeometryTextView (Context con) { super(con); } public DynamicGeometryTextView (Context con, AttributeSet attrs) { super(con, attrs); } public DynamicGeometryTextView (Context con, AttributeSet attrs, int style) { super(con, attrs, style); } 

Это нестатический внутренний класс, поскольку ему необходимо получить доступ к данным экземпляра из внешнего класса. Он отображается в макете .xml:

 <view class="cogdis.chalkboard.DisplayText$DynamicGeometryTextView" android:id="@+id/chalkboard" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

Все компилируется и устанавливается отлично, но во время выполнения:

 Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class cogdis.chalkboard.DisplayText$DynamicGeometryTextView at android.view.LayoutInflater.createView(LayoutInflater.java:596) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256) at android.app.Activity.setContentView(Activity.java:1867) at cogdis.chalkboard.DisplayText.onCreate(DisplayText.java:26) at android.app.Activity.performCreate(Activity.java:5008) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) ... 11 more Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] at java.lang.Class.getConstructorOrMethod(Class.java:460) at java.lang.Class.getConstructor(Class.java:431) at android.view.LayoutInflater.createView(LayoutInflater.java:561) ... 22 more 

На мой взгляд, это означает, что он не может найти версию (Context, AttributeSet) конструктора … но он существует. Я просмотрел несколько других сообщений SO, таких как Android Custom View Constructor , все это указывает на то же самое (на мой взгляд) и несколько раз читайте Руководство по API на пользовательских компонентах, но я был в тупике с этим более чем час.

У кого-нибудь есть идеи? Есть ли способ отладить это дальше?

Для POSTERITY , т. Е. Любого нового для этого типа меня, нестатические внутренние классы – это не-go, если ваш пользовательский вид ссылается в макете XML, но если вы создаете его программно, он может работать, например:

  LayoutInflater lif = getLayoutInflater(); ViewGroup layout = (ViewGroup)lif.inflate(R.layout.board, null); tv = new DynamicGeometryTextView(this); layout.addView((View)tv); 

В этом случае вам нужно только сопоставить конструкторы, которые вы используете. Параметры макета (WRAP_CONTENT и т. Д.) Могут быть установлены в конструкторе через setLayoutParams() который наследуется от View.

Solutions Collecting From Web of "Внедрение расширенного / настраиваемого представления throws NoSuchMethod для конструктора"

Невозможно создать экземпляр нестатического внутреннего класса без ссылки на экземпляр внешнего класса .

 OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 

Таким образом, это может быть причиной того, что надувной элемент макета не смог раздуть ваш класс. Сделайте свой класс статическим после удаления ссылок на внешние члены класса.

Изменить:

 public class DynamicGeometryTextView extends TextView { 

Для того, чтобы:

 public static class DynamicGeometryTextView extends TextView { 

Чтобы правильно ссылаться на него, он должен быть static внутренним классом