Intereting Posts
Как использовать NodeJS в Android с помощью J2V8 Как программно настроить шрифт для шрифтов Spinner? Android setError (), прокручивающееся над ActionBar Рекламная реклама AdBuddiz или AdMob Как добавить плитки на карту Google и их анимацию, т.е. заменить их на новые плитки непрерывно Разница между размером андроида: pt и dp Что вызывает это исключение java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> Являются ли векторные изображения полезными для Android? Как начать новую деятельность с использованием ожидающего намерения Android – Интервал между CheckBox и текстом MediaPlayer.setDataSource вызывает IOException для действительного файла Как пользователи / разработчики могут установить конфигурацию прокси-сервера Android для версий 2.x? Ошибка курсора Android – «убедитесь, что курсор инициализирован правильно, прежде чем доступ к данным из него …» В чем смысл android.intent.action.MAIN? Указание «зачеркивания» в разделе текста TextView

Использование 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