Buttermesser kann sich nicht in meiner Adapterklasse binden

Ich habe einen Adapter, der die Layouts für meine Navigationsschublade zeichnet. Meine Navigationsschublade enthält zwei innere XML-Dateien: Einer der Header und der andere ist die Row . Ich zeichne diese in einem einzigen Adapter, aber wenn ich versuche, setText() auf meinem Header zu setzen, bekomme ich Fehler zu binden. Hier ist meine Adapterklasse:

 public class DrawerAdapter extends RecyclerView.Adapter<DrawerAdapter.ViewHolder> { private static final int HEADER_TYPE = 0; private static final int ROW_TYPE = 1; private static Context context; private static DatabaseHelper databaseHelper; private List<String> rows; private List<Integer> icons; private String driverName; public DrawerAdapter(Context context, List<String> rows, List<Integer> icons, String driverName, DatabaseHelper databaseHelper) { this.icons = icons; this.rows = rows; this.context = context; this.driverName = driverName; this.databaseHelper = databaseHelper; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == HEADER_TYPE) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.drawer_header, parent, false); return new ViewHolder(view, viewType); } else if (viewType == ROW_TYPE) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.drawer_row, parent, false); return new ViewHolder(view, viewType); } return null; } @Override public void onBindViewHolder(ViewHolder holder, int position) { if (holder.viewType == ROW_TYPE) { String rowText = rows.get(position - 1); int imageView = icons.get(position - 1); holder.textView.setText(rowText); holder.imageView.setImageResource(imageView); } else if (holder.viewType == HEADER_TYPE) { holder.driverNameText.setText(driverName); } } @Override public int getItemCount() { return rows.size() + 1; } @Override public int getItemViewType(int position) { if (position == 0) return HEADER_TYPE; return ROW_TYPE; } public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { protected int viewType; @Bind(R.id.drawer_row_icon) ImageView imageView; @Bind(R.id.drawer_row_text) TextView textView; @Bind(R.id.drawer_row_id) FrameLayout listRow; @Bind(R.id.driverName) TextView driverNameText; public ViewHolder(View itemView, int viewType) { super(itemView); this.viewType = viewType; if (viewType == ROW_TYPE) { ButterKnife.bind(this, itemView); imageView.setOnClickListener(this); textView.setOnClickListener(this); listRow.setOnClickListener(this); } else { ButterKnife.bind(this, itemView); } } } 

Wie Sie in meiner onCreateViewHolder Methode sehen können, onCreateViewHolder ich für beide viewType , also weiß ich, welches Layout zu zeichnen ist. Dies wiederum wird ein neues Objekt für die ViewHolder Klasse ViewHolder , in dem ich "TRY" bin, um die Elemente in meinem xml abhängig vom viewType zu binden. Bin ich etwas fehlt oder etwas falsch mache?

  • Protokollierung auf eine Datei auf Android
  • Android: So laden Sie die Datei vom Server herunter und speichern Sie sie in einem bestimmten Ordner in sdcard
  • Lokalisierung und Beseitigung der Ursache der großen Haufengröße
  • Wo ist BuildConfig.DEBUG?
  • Erstellen Sie Listenansicht in Fragment Android
  • Wie finde ich alle hartcodierten Saiten in meinem Projekt in Android Studio
  • Google Analytics Probleme nach Play Services Upgrade auf 7.5
  • Admob kann nicht finden Transfer Geld Link in Google Admob Panel
  • BufferQueue wurde aufgegeben: Beim Abspielen von Video mit TextureView
  • So erstellen Sie Topic in FCM-Benachrichtigungen
  • Android Drag & Drop getClipData gibt immer null zurück
  • Herausfinden, ob die Statusleiste oben oder unten ist?
  • 2 Solutions collect form web for “Buttermesser kann sich nicht in meiner Adapterklasse binden”

    Ich konnte dieses Problem lösen, indem ich folgendes tat:

    Zuerst haben die api docs folgendes angegeben

    Standardmäßig sind die Ansichten im Layout für Feld- und Methodenbindungen vorhanden. Wenn eine Ansicht optional ist, fügen Sie eine @Nullable-Annotation hinzu, z. B. die in der Support-Annotations-Bibliothek.

    @Nullable @Bind(R.id.title) TextView subtitleView;

    http://jakewharton.github.io/butterknife/javadoc/

    Jetzt, da ich verschiedene Elemente hatte, um aus verschiedenen XML-Dateien zu binden, musste ich sie als @Nullable markieren, weil es möglich ist, dass sie nicht einmal bindbar sein werden, um damit zu beginnen. Ich habe meinen Code geändert, um folgendes zu tun:

     @Nullable @Bind(R.id.drawer_row_icon) ImageView imageView; @Nullable @Bind(R.id.drawer_row_text) TextView textView; @Nullable @Bind(R.id.drawer_row_id) FrameLayout listRow; @Nullable @Bind(R.id.driverName) TextView driverNameText; 

    Während auch die ButterKnife.bind() außerhalb meines IF-ELSE Blocks bewegt wird.

    Sie sind zweimal verpflichtet. Du kannst nicht zweimal an der gleichen Ansicht binden. Es macht nur Ihre findviewbyid Anrufe. Rufen Sie einmal über Ihren if-Block

     public ViewHolder(View itemView, int viewType) { super(itemView); this.viewType = viewType; ButterKnife.bind(this, itemView); if (viewType == ROW_TYPE) { imageView.setOnClickListener(this); textView.setOnClickListener(this); listRow.setOnClickListener(this); } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.