Adattatore personalizzato per il cassetto di navigazione

Ho un cassetto di navigazione funzionante che utilizza ArrayAdapter come mostrato nella documentazione . Voglio impostare icone di ImageView per ciascuno degli elementi del cassetto di navigazione, per cui ho bisogno di creare un'adattatore personalizzato da utilizzare, ma non sono sicuro di come farlo. Quello che ho sotto funziona senza schiantare l'applicazione, ma il cassetto di navigazione si apre vuoto, senza niente in esso. Puoi aiutarmi per favore? Grazie in anticipo!

Quello che ho fatto per una scheda personalizzata finora:

  • Rendere i pulsanti hanno la stessa width nel layout
  • Come gestire più frammenti per una singola attività
  • PreviewCallback onPreviewFrame non modifica i dati
  • Alla ricerca di un esempio di lavoro di addTimedTextSource per l'aggiunta di sottotitoli a un video da un file .srt in Android 4.1
  • Come get un file veloce Hashing algorithm per i file di grandi size su un dispositivo mobile
  • Come aggiungere un arrays string in un object JSON?
  •  public class CustomAdapter extends ArrayAdapter { private final Context context; public CustomAdapter(Context context) { super(context, R.layout.drawer_list_item); this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.drawer_list_item, parent, false); TextView textViewHome = (TextView) v.findViewById(R.id.drawerHomeTextView); ImageView imageViewHome = (ImageView) v.findViewById(R.id.drawerHomeImage); TextView textViewList = (TextView) v.findViewById(R.id.drawerListTextView); ImageView imageViewList = (ImageView) v.findViewById(R.id.drawerListImage); return v; } } 

    Impostazione del cassetto in MainActivity :

     mDrawerList = (ListView) findViewById(R.id.leftDrawer); mDrawerList.setAdapter(new CustomAdapter(this)); 

    Il ListView utilizzato:

     <ListView android:id="@+id/leftDrawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="left" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#111"/> 

    drawer_list_item.xml :

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent"> <RelativeLayout android:id="@+id/drawerRelativeLayoutHome" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/drawerHomeImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_centerVertical="true" android:paddingStart="4dp" android:paddingEnd="4dp" android:paddingLeft="4dp" android:src="@drawable/ic_menu_home"/> <TextView android:id="@+id/drawerHomeTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/drawerHomeImage" android:layout_toEndOf="@+id/drawerHomeImage" android:background="@drawable/background_activated" android:paddingLeft="4dp" android:paddingRight="4dp" android:paddingTop="12dp" android:paddingBottom="12dp" android:text="Home" android:textSize="20sp"/> </RelativeLayout> <RelativeLayout android:id="@+id/drawerRelativeLayoutList" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/drawerRelativeLayoutHome"> <!-- same as above, but ic_menu_archive as drawable, and "List" as text --> </RelativeLayout> </RelativeLayout> 

    2 Solutions collect form web for “Adattatore personalizzato per il cassetto di navigazione”

    Per l'adattatore personalizzato:

     public class NavDrawerAdapter extends ArrayAdapter<NavDrawerItem> { private final Context context; private final int layoutResourceId; private NavDrawerItem data[] = null; public NavDrawerAdapter(Context context, int layoutResourceId, NavDrawerItem [] data) { super(context, layoutResourceId, data); this.context = context; this.layoutResourceId = layoutResourceId; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); View v = inflater.inflate(layoutResourceId, parent, false); ImageView imageView = (ImageView) v.findViewById(R.id.navDrawerImageView); TextView textView = (TextView) v.findViewById(R.id.navDrawerTextView); NavDrawerItem choice = data[position]; imageView.setImageResource(choice.icon); textView.setText(choice.name); return v; } } 

    Per NavDrawerItem :

     public class NavDrawerItem { public int icon; public String name; public NavDrawerItem(int icon, String name) { this.icon = icon; this.name = name; } } 

    Per drawer_list_item.xml :

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent" android:background="?android:attr/activatedBackgroundIndicator" android:minHeight="?android:attr/listPreferredItemHeightSmall" android:padding ="10dp"> <ImageView android:id="@+id/navDrawerImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:paddingRight="10dp"/> <TextView android:id="@+id/navDrawerTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/navDrawerImageView" android:paddingRight="10dp" android:textAppearance="?android:attr/textAppearanceListItemSmall"/> </RelativeLayout> 

    In MainActivity.java , MainActivity.java un'istanza di arrays di oggetti NavDrawerItem , con l'appropriato drawable e nome per ciascuno, e quindi passare questa matrix quando si imposta la scheda, come segue:

    mDrawerList.setAdapter(new YourAdapter(this, R.layout.drawer_list_item, yourArray));

    aggiornato
    1) Non riesco a vedere la fonte di dati da visualizzare nel tuo codice – non lo trasmetti al constructor o in nessun altro modo
    2) In getView() è necessario impostare valori per le Viste
    3) Per essere efficiente è necessario riutilizzare convertView se non è null
    4) E infine – per il tuo CustomAdapter sostituire anche i seguenti methods:

      @Override public int getViewTypeCount() { ... } @Override public int getItemViewType(int position) { ... } @Override public int getCount() { ... } @Override public YOUR_ITEM_TYPE getItem(int position) { ... } @Override public long getItemId(int position) { ... } @Override public boolean hasStableIds() { ... } @Override public boolean isEmpty() { ... } @Override public boolean areAllItemsEnabled() { ... } @Override public boolean isEnabled(int position) { ... } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.