Utilizzo di coltello da burro in Custom BaseAdapter SubClass Risultati in errore "Imansible iniettare viste"

Sto tentando di utilizzare Butter Knife per semplificare la creazione di una class BaseAdapter personalizzata. Sto seguendo l'esempio qui: http://jakewharton.github.io/butterknife/ sotto l' opzione "Un altro utilizzo è semplificare il model di titolare di visualizzazione all'interno di una scheda di elenco". sezione. Purtroppo, ottengo un errore "Imansible iniettare viste" each volta che viene creato il ViewHolder per each elemento dell'elenco.

Ecco il mio codice:

  • Calcola la dimensione dell'image quando si utilizza setCompoundDrawables per EditText
  • Android Google mappe APIv2 InfoWindow e Marker
  • JSON arrays analizzando in android
  • Sveglia Android Phone / tablet?
  • Google Map non viene mostrata sull'attività della scheda
  • Come centrare l'indicatore di progresso in ProgressDialog facilmente (quando nessun titolo / text è passato lungo)
  • public class ButterknifeCustomBaseAdapter extends BaseAdapter{ @Override public int getCount() { return arraysListNames.size(); } @Override public Name getItem(int iPosition) { return arraysListNames.get(iPosition); } @Override public long getItemId(int iID) { return 0; } LayoutInflater inflater; ArrayList<Name> arraysListNames = new ArrayList<Name>(); static Context context; Activity activity; public ButterknifeCustomBaseAdapter(Context context, ArrayList<Name> names, Activity activity) { arraysListNames = 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; } 

    }

    L'errore accade al "ButterKnife.Inject (questo, vista)"; linea. Accade anche each volta che viene creato il titolare di visualizzazione per each elemento che metto nell'elenco. Qualcuno sa come fare questo lavoro come dovrebbe?

    In risposta al commento di Jake Wharton Innanzitutto, grazie per aver sviluppato questo strumento. Ha reso lo sviluppo di android molto più piacevole di quanto non fosse quando ho iniziato.

    Ecco la stacktrace completa:

     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) 

  • Ottenere NoSuchFieldError INSTANCE org / apache / http / messaggio / BasicHeaderValueParser
  • Come impostare TimePicker show con il formato 24h
  • CoreLocation intestazione Android
  • Effetto sbiadito tra i layout
  • app si blocca quando il filatore viene premuto all'interno di popupwindow che si trova nel frammento
  • Android: Dove è nascosto l'attributo di colore del text di Spinner widget?
  • 5 Solutions collect form web for “Utilizzo di coltello da burro in Custom BaseAdapter SubClass Risultati in errore "Imansible iniettare viste"”

    Controllare se il tuo @InjectView s ha il tipo corretto. Ho usato ImageView invece di LinearLayout . Anche questo potrebbe essere il tuo problema.

    Aggiornare:

    Assicurarsi di non utilizzare il @OnItemClick di @OnItemClick(R.id.non_list_view) con un non ListView . Lo stavo utilizzando per un android.support.v7.widget.RecyclerView che stava causando l'exception seguente:

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

    Controllare anche se si sta gonfiando correttamente R.layout. file. Se no – le viste necessarie non vengono trovate e questo errore si verifica.

    Ho avuto un problema simile con ButterKnife, ma la ragione era che stavo gonfiando il mio frammento con il layout sbagliato.

    ( So che la domanda è stata già risolta, ma ho deciso di submit la mia soluzione nel caso in cui qualcuno abbia avuto la stessa questione )

    Per me è risultato che il ViewBinder non è stato aggiornato correttamente. Un progetto pulito e pulito risolve questo problema.

    Coloro che lo stanno ancora guardando accadono se si tenta di bind errato Visualizza il tipo da XML nel file Java.

    Per esempio

    Hai TextView con il risultato dell'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" /> 

    E si tenta di legarlo con Button nel file java

    @BindView (Risultato) Risultati del button;

    È andato fallito app.

    Butterknife lancerà l'exception per il casting illegale di viste come Imansible iniettare l'errore di visualizzazione

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.