Intereting Posts
Android – Изменить цвет темы темы Holo по умолчанию Apache Commons Codec с Android: не удалось найти метод «Недостаточно места для хранения», даже в памяти устройства много свободного места Какова цель «полезной нагрузки разработчика»? Для чего он может быть использован? Графические размеры для hdpi / ldpi / mdpi Android: как создать представление, чтобы заполнить свободное пространство? Сравнение двух чертежей в android Сохранить файл с помощью двоичной строки на Android через HTML5 Как получить последние задания на Android «L»? Вызов метода активности из фрагмента Поверните предварительный просмотр камеры на портретную камеру OpenCV для Android Как использовать стандартный атрибут android: текст в моем пользовательском представлении? Android Studio 1.0.2 новый проект – Не удается разрешить символ «ActionBarActivity» Как получить ответ 401 без обработки с помощью try / catch в android Как я могу ссылаться на внешние файлы jar в общем каталоге (а не на lib) для создания проекта андроида с помощью ant?

Использование Butter Knife в пользовательских BaseAdapter SubClass Результаты в «Невозможно ввести представления»

Я пытаюсь использовать Butter Knife, чтобы упростить создание пользовательского класса BaseAdapter. Я следую примеру здесь: http://jakewharton.github.io/butterknife/ в разделе «Еще одно использование упрощает шаблон держателя вида внутри адаптера списка». раздел. К сожалению, я получаю ошибку «Невозможно внедрить представления» каждый раз, когда создается ViewHolder для каждого элемента в списке.

Вот мой код:

public class ButterknifeCustomBaseAdapter extends BaseAdapter{ @Override public int getCount() { return arrayListNames.size(); } @Override public Name getItem(int iPosition) { return arrayListNames.get(iPosition); } @Override public long getItemId(int iID) { return 0; } LayoutInflater inflater; ArrayList<Name> arrayListNames = new ArrayList<Name>(); static Context context; Activity activity; public ButterknifeCustomBaseAdapter(Context context, ArrayList<Name> names, Activity activity) { arrayListNames = names; this.context = context; inflater = LayoutInflater.from(this.context); } static class ViewHolder implements View.OnClickListener { @InjectView(R.id.textViewFullName) TextView textViewFullName; @InjectView(R.id.imageButtonDeleteName) TextView imageButtonDeleteName; @OnClick(R.id.imageButtonDeleteName) public void onClick(View view) { ((NameActivity)context).DeleteUser((Name)view.getTag()); } public ViewHolder(View view) { ButterKnife.inject(this, view); } } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView != null) { viewHolder = (ViewHolder) convertView.getTag(); } else { convertView = inflater.inflate(R.layout.item_name, parent, false); viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); } viewHolder.textViewFullName.setText(((Name)getItem(position)).GetFullName()); Ll("ArrayAdapterName", ((Name)getItem(position)).GetID() + " inserted in list | position = " + position); viewHolder.imageButtonDeleteName.setTag((Name)getItem(position)); return convertView; } 

}

Ошибка происходит в «ButterKnife.Inject (это, просмотр)»; линия. Это также происходит каждый раз, когда создатель представления создается для каждого элемента, который я помещаю в список. Кто-нибудь знает, как сделать эту работу так, как она должна?

В ответ на комментарий Джейка Уортона. Прежде всего, позвольте мне сказать спасибо за разработку этого инструмента. Это сделало развитие Android более приятным, чем когда я впервые начал.

Вот полный stacktrace:

 05-04 07:29:01.991 2424-2424/com.murach.databasehomework E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to inject views for com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder@52700878 at butterknife.ButterKnife.inject(ButterKnife.java:221) at butterknife.ButterKnife.inject(ButterKnife.java:184) at com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder.<init>(ButterknifeCustomBaseAdapter.java:59) at com.murach.databasehomework.ButterknifeCustomBaseAdapter.getView(ButterknifeCustomBaseAdapter.java:70) at android.widget.AbsListView.obtainView(AbsListView.java:2177) at android.widget.ListView.makeAndAddView(ListView.java:1840) at android.widget.ListView.fillDown(ListView.java:675) at android.widget.ListView.fillFromTop(ListView.java:736) at android.widget.ListView.layoutChildren(ListView.java:1655) at android.widget.AbsListView.onLayout(AbsListView.java:2012) at android.view.View.layout(View.java:14289) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) at android.view.View.layout(View.java:14289) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14289) at android.view.ViewGroup.layout(ViewGroup.java:4562) at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349) at android.view.View.layout(View.java:14289) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at android.view.View.layout(View.java:14289) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) at android.view.Choreographer.doCallbacks(Choreographer.java:562) at android.view.Choreographer.doFrame(Choreographer.java:532) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at butterknife.ButterKnife.inject(ButterKnife.java:216)            at butterknife.ButterKnife.inject(ButterKnife.java:184)            at com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder.<init>(ButterknifeCustomBaseAdapter.java:59)            at com.murach.databasehomework.ButterknifeCustomBaseAdapter.getView(ButterknifeCustomBaseAdapter.java:70)            at android.widget.AbsListView.obtainView(AbsListView.java:2177)            at android.widget.ListView.makeAndAddView(ListView.java:1840)            at android.widget.ListView.fillDown(ListView.java:675)            at android.widget.ListView.fillFromTop(ListView.java:736)            at android.widget.ListView.layoutChildren(ListView.java:1655)            at android.widget.AbsListView.onLayout(AbsListView.java:2012)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at android.widget.FrameLayout.onLayout(FrameLayout.java:448)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at android.widget.FrameLayout.onLayout(FrameLayout.java:448)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)            at android.view.Choreographer.doCallbacks(Choreographer.java:562)            at android.view.Choreographer.doFrame(Choreographer.java:532)            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)            at android.os.Handler.handleCallback(Handler.java:730)            at android.os.Handler.dispatchMessage(Handler.java:92)            at android.os.Looper.loop(Looper.java:137)            at android.app.ActivityThread.main(ActivityThread.java:5103)            at java.lang.reflect.Method.invokeNative(Native Method)            at java.lang.reflect.Method.invoke(Method.java:525)            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)            at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassCastException: android.widget.ImageButton cannot be cast to android.widget.TextView at com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder$$ViewInjector.inject(ButterknifeCustomBaseAdapter$ViewHolder$$ViewInjector.java:13)            at java.lang.reflect.Method.invokeNative(Native Method)            at java.lang.reflect.Method.invoke(Method.java:525)            at butterknife.ButterKnife.inject(ButterKnife.java:216)            at butterknife.ButterKnife.inject(ButterKnife.java:184)            at com.murach.databasehomework.ButterknifeCustomBaseAdapter$ViewHolder.<init>(ButterknifeCustomBaseAdapter.java:59)            at com.murach.databasehomework.ButterknifeCustomBaseAdapter.getView(ButterknifeCustomBaseAdapter.java:70)            at android.widget.AbsListView.obtainView(AbsListView.java:2177)            at android.widget.ListView.makeAndAddView(ListView.java:1840)            at android.widget.ListView.fillDown(ListView.java:675)            at android.widget.ListView.fillFromTop(ListView.java:736)            at android.widget.ListView.layoutChildren(ListView.java:1655)            at android.widget.AbsListView.onLayout(AbsListView.java:2012)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at android.widget.FrameLayout.onLayout(FrameLayout.java:448)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:349)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at android.widget.FrameLayout.onLayout(FrameLayout.java:448)            at android.view.View.layout(View.java:14289)            at android.view.ViewGroup.layout(ViewGroup.java:4562)            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)            at android.view.Choreographer.doCallbacks(Choreographer.java:562)            at android.view.Choreographer.doFrame(Choreographer.java:532)            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)            at android.os.Handler.handleCallback(Handler.java:730)            at android.os.Handler.dispatchMessage(Handler.java:92)            at android.os.Looper.loop(Looper.java:137)            at android.app.ActivityThread.main(ActivityThread.java:5103)            at java.lang.reflect.Method.invokeNative(Native Method)            at java.lang.reflect.Method.invoke(Method.java:525)            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)            at dalvik.system.NativeStart.main(Native Method) 

Solutions Collecting From Web of "Использование Butter Knife в пользовательских BaseAdapter SubClass Результаты в «Невозможно ввести представления»"

Проверьте, имеет ли ваш @InjectView s правильный тип. Я использовал ImageView вместо LinearLayout . Возможно, это и ваша проблема.

Обновить:

Убедитесь, что вы не используете @OnItemClick @OnItemClick(R.id.non_list_view) с не ListView . Я использовал его для android.support.v7.widget.RecyclerView который вызывал следующее исключение:

 java.lang.RuntimeException: Unable to inject views for MyFragment{... id=.... android:switcher:...} 

Также проверьте, правильно ли вы раздуваете R.layout. файл. Если нет – необходимые представления не найдены и эта ошибка возникает.

У меня была аналогичная проблема с ButterKnife, но причина в том, что я раздувал свой фрагмент с неправильной компоновкой.

( Я знаю, что на этот вопрос уже был дан ответ, но я решил опубликовать свое решение, если у кого-то была такая же проблема )

Для меня оказалось, что ViewBinder не был правильно обновлен. Чистая конструкция проекта решила эту проблему.

Те, кто все еще смотрит это, случаются, если вы пытаетесь связать неправильный вид вида с XML в файле Java.

Например

У вас есть TextView с результатом ID

  <TextView android:id="@+id/result" android:layout_width="match_parent" android:layout_height="0dp" android:gravity="center" android:layout_centerHorizontal="true" android:layout_margin="3dp" android:layout_weight="2" android:background="#fff" android:text="Calculator" android:textSize="25sp" /> 

И вы пытаетесь связать его с Button в java-файле

@BindView (R.id.result) Результат кнопки;

Это пошатнуло ваше приложение.

Butterknife будет генерировать исключение для нечетного каста представлений как Unable to Inject View Error