title: Custom Listview not displaying
body: <p><strong>What I am doing:</strong></p>
  
  <blockquote>
    <p>I am writing an android app that has to do with maps and routes etc. On the home screen of the application , there is a button that opens the favorites page. The favorites page is comprised out of the following xml layout.</p>
  </blockquote>
  
  <p>layout_favorites.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@drawable/mainscreen2"&gt;
          &lt;HorizontalScrollView
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:scrollbarSize="0dp"
          &gt;
              &lt;LinearLayout
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"&gt;
                  &lt;ImageView
                  android:id="@+id/imageViewfavorites"
                  android:scaleType="fitEnd"
                  android:layout_marginTop="10dp"
                  android:layout_marginBottom="3dp"
                  android:layout_marginLeft="3dp"
                  android:layout_marginRight="3dp"
                  android:layout_width="60px"
                  android:layout_height="60px"
                  android:src="@drawable/android_button_44_2"/&gt;
                  &lt;TextView
                  android:id="@+id/textview_favorites"
                  android:background="@null"
                  android:scaleType="fitEnd"
                  android:layout_marginTop="15dp"
                  android:layout_marginBottom="3dp"
                  android:layout_marginLeft="3dp"
                  android:layout_marginRight="3dp"
                  android:layout_width="wrap_content"
                  android:layout_height="60px"
                  android:textSize="35sp"
                  android:textColor="#000000"
                  android:text="Favorites"/&gt;
              &lt;/LinearLayout&gt;
          &lt;/HorizontalScrollView&gt;
          &lt;ListView
              android:id="@+id/listview_favorites"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:layout_marginTop="45dp"
              android:cacheColorHint="#00000000"
              &gt;
              &lt;/ListView&gt;
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>This is working fine , no worries. In the top layout , you will see there is a ListView. I want to populate that ListView with rows looking like this:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      android:padding="5dip" &gt;
          &lt;ImageView
              android:id="@+id/route_image"
              android:layout_width="50dip"
              android:layout_height="50dip"/&gt;
      &lt;TextView
          android:id="@+id/route_title"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignTop="@+id/route_image"
          android:layout_toRightOf="@+id/route_image"
          android:textColor="#000000"
          android:textSize="15dip"
          android:textStyle="bold"/&gt;
      &lt;TextView
          android:id="@+id/route_author"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_below="@id/route_title"
          android:textColor="#000000"
          android:textSize="10dip"
          android:layout_marginTop="1dip"
          android:layout_toRightOf="@+id/thumbnail"/&gt;
      &lt;TextView
          android:id="@+id/route_length"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentRight="true"
          android:layout_alignTop="@id/route_title"
          android:gravity="right"
          android:layout_marginRight="5dip"
          android:textSize="10dip"
          android:textColor="#10bcc9"
          android:textStyle="bold"/&gt;
       &lt;ImageView 
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentRight="true"
          android:layout_centerVertical="true"
          android:src="@drawable/arrow"/&gt;
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p>So in the end , it should look something like this:</p>
  
  <p>(image drawn in paint :p)
  <a href="http://s9.postimage.org/cgcahc1i7/Untitled.png" rel="nofollow">http://s9.postimage.org/cgcahc1i7/Untitled.png</a></p>
  
  <p>OR</p>
  
  <p><a href="http://imageshack.us/photo/my-images/694/67362201.png/" rel="nofollow">http://imageshack.us/photo/my-images/694/67362201.png/</a></p>
  
  <p>Now, heres where the problem comes in. It does not display. I am using a custom Adapter that extends the BaseAdapter class to handle the Listview and inflate the view etc. I will post the Adapater and then the Activity for the Favorites screen.</p>
  
  <p>Adapter class:</p>
  
  <pre><code>import android.content.Context;
  import android.graphics.drawable.Drawable;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.BaseAdapter;
  import android.widget.ImageView;
  import android.widget.TextView;
  
  
  /**
   *
   * @author Gideon
   */
  public class Adapter_Maplist_Page_Favorites extends BaseAdapter
  {
      //----------------------------------------
      //  Variables
      //----------------------------------------
          private Context context;
          private final Drawable[] drawables;
          private final String[] titles;
          private final String[] authors;
          private final String[] durations;
      //----------------------------------------
  
      //----------------------------------------
      //  Methods
      //----------------------------------------
  
  
          public Adapter_Maplist_Page_Favorites(Context context ,String[] titles,String[] authors,String[] durations,Drawable[] drawables)
          {
  
              this.context = context;
              this.titles = titles;
              this.authors = authors;
              this.durations = durations;
              this.drawables = drawables;
          }
  
          public View getView(int position, View convertView, ViewGroup parent)
          {
  
                  LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              View rowView = inflater.inflate(R.layout.layout_favorites_row, parent);
  
  
                  ImageView map_image = (ImageView) rowView.findViewById(R.id.route_image);
              TextView map_title = (TextView) rowView.findViewById(R.id.route_title);
              TextView map_author = (TextView) rowView.findViewById(R.id.route_author);
                  TextView map_length = (TextView) rowView.findViewById(R.id.route_length);
                  ImageView map_image_arrow = (ImageView) rowView.findViewById(R.drawable.arrow);
  
                  map_image.setBackgroundDrawable(drawables[position]);
                  map_title.setText(titles[position]);
                  map_author.setText(authors[position]);
                  map_length.setText(durations[position]);
                  map_image_arrow.setBackgroundDrawable(map_image_arrow.getBackground());
  
  
          return rowView;
      }
          //----------------------------------------
  
          //----------------------------------------
          // Not Implemented
          //----------------------------------------
          public Object getItem(int arg0)
          {
              return null;
          }
  
          public long getItemId(int position)
          {
             return 0;
          }
  
          public int getCount()
          {
              throw new UnsupportedOperationException("Not supported yet.");
          }
              //----------------------------------------
      //----------------------------------------
  }
  </code></pre>
  
  <p>Favorites Activity Class:</p>
  
  <pre><code>import android.app.ListActivity;
  import android.graphics.drawable.Drawable;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.AdapterView.OnItemClickListener;
  import android.widget.ImageView;
  import android.widget.ListView;
  import android.widget.Toast;
  
  
  
  /**
   *
   * @author Gideon
   */
  public class Page_Favorites extends ListActivity
  {
      //---------------------------------------------------------------------------------------------------------------
      //Hierdie info sal in die toekoms vanaf die databsae moet kom of net vervang word met die database entries in for loops etc. (This info will be loaded from the database in the future)
      //---------------------------------------------------------------------------------------------------------------
      public final String[] map_titles = {"Route 1","Route 2","Route 3","Route 4","Route 5","Route 6"};
      public final String[] map_authors = {"Jannie","Sannie","Bennie","Kosie","Gideon","Alex"};
      public final String[] map_lengths = {"42km","2km","21.5km","8km","34km","23km"};
      ImageView iv = (ImageView) findViewById(R.drawable.route_image_1);
      public final Drawable[] map_images = {iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground(),iv.getBackground()};
      //---------------------------------------------------------------------------------------------------------------
  
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle icicle)
      {
          super.onCreate(icicle);
          overridePendingTransition(R.layout.animation_fadein, R.layout.animation_fadeout);
          setContentView(R.layout.layout_favorites);
          // ToDo add your GUI initialization code here
  
          ListView list = (ListView) findViewById(R.id.listview_favorites);
          list.setAdapter(new Adapter_Maplist_Page_Favorites(this, map_titles, map_authors, map_lengths, map_images));
  
          list.setOnItemClickListener(new OnItemClickListener()
          {
              public void onItemClick(AdapterView&lt;?&gt; parent, View v, int position, long id)
              {
                 Toast.makeText(Page_Favorites.this, "" + position, Toast.LENGTH_SHORT).show();
              }
          });
      }
  }
  </code></pre>
  
  <p>When I click on the button to launch the favorites screen/activity and create the listview , the application exits with an error (was forced to quit ...). Any help or ideas will be appreciated. Thx.</p>
  
  <p><strong>EDIT:</strong></p>
  
  <p>Adb Log Errors:</p>
  
  <pre><code>22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime  FATAL EXCEPTION: main
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime  java.lang.RuntimeException: Unable to start activity ComponentInfo{RedPheasant.LoggerApp/RedPheasant.LoggerApp.Page_Favorites}: java.lang.NullPointerException
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.access$1500(ActivityThread.java:117)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.os.Handler.dispatchMessage(Handler.java:99)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.os.Looper.loop(Looper.java:123)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.main(ActivityThread.java:3687)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at java.lang.reflect.Method.invokeNative(Native Method)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at java.lang.reflect.Method.invoke(Method.java:507)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at dalvik.system.NativeStart.main(Native Method)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime  Caused by: java.lang.NullPointerException
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at RedPheasant.LoggerApp.Page_Favorites.onCreate(Page_Favorites.java:48)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
  22:54:21.505    24082   ERROR   RedPheasant.LoggerApp   AndroidRuntime      ... 11 more
  22:54:21.515    212 ERROR   #212        Dumpstate &gt; /data/log/dumpstate_app_error
  </code></pre>
  
  <p>Also , fixed this part :</p>
  
  <pre><code>public int getCount()
      {
         if(titles == null)
          {
              return 0;
          }
          return titles.length;
      }
  </code></pre>
  
  <p>still getting the same problem.
  <strong>EDIT 2:</strong></p>
  
  <p>Ok guys, thx for all the help so far...</p>
  
  <p>I have furthermore changed this:</p>
  
  <p>The new Favorites Page activity (modified):</p>
  
  <pre><code>public class Page_Favorites extends Activity
  {
  
  
  
  
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle icicle)
      {
          super.onCreate(icicle);
          overridePendingTransition(R.layout.animation_fadein, R.layout.animation_fadeout);
          setContentView(R.layout.layout_favorites);
          // ToDo add your GUI initialization code here
  
          //---------------------------------------------------------------------------------------------------------------
          //Hierdie info sal in die toekoms vanaf die databsae moet kom of net vervang word met die database entries in for loops etc.
          //---------------------------------------------------------------------------------------------------------------
  
  
          String[] map_titles = {"Route 1","Route 2","Route 3","Route 4","Route 5","Route 6"};
          String[] map_authors = {"Jannie","Sannie","Bennie","Kosie","Gideon","Alex"};
          String[] map_lengths = {"42km","2km","21.5km","8km","34km","23km"};
          //ImageView iv = (ImageView) findViewById(R.drawable.route_image_1);
          Drawable d = getResources().getDrawable(R.drawable.route_image_1);
          Drawable[] map_images = {d,d,d,d,d,d};
          Drawable d2 = getResources().getDrawable(R.drawable.arrow);
         //---------------------------------------------------------------------------------------------------------------
  
          ListView list = (ListView) findViewById(R.id.listview_favorites);
          list.setAdapter(new Adapter_Maplist_Page_Favorites(this, map_titles, map_authors, map_lengths, map_images,d2));//lika a boss itches
  
          list.setOnItemClickListener(new OnItemClickListener()
          {
              public void onItemClick(AdapterView&lt;?&gt; parent, View v, int position, long id)
              {
                 Toast.makeText(Page_Favorites.this, "" + position, Toast.LENGTH_SHORT).show();
              }
          });
      }
  }
  </code></pre>
  
  <p>The new Adapter class (modified):</p>
  
  <pre><code>public class Adapter_Maplist_Page_Favorites extends BaseAdapter
  {
      //----------------------------------------
      //  Variables
      //----------------------------------------
          private Context context;
          private final Drawable[] drawables;
          private final String[] titles;
          private final String[] authors;
          private final String[] durations;
          private final Drawable d;
      //----------------------------------------
  
      //----------------------------------------
      //  Methods
      //----------------------------------------
  
  
          public Adapter_Maplist_Page_Favorites(Context context ,String[] titles,String[] authors,String[] durations,Drawable[] drawables,Drawable d)
          {
  
              this.context = context;
              this.titles = titles;
              this.authors = authors;
              this.durations = durations;
              this.drawables = drawables;
              this.d = d;
          }
          //----------------------------------------
  
  
          public View getView(int position, View convertView, ViewGroup parent)
          {
  
                  LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          View rowView = inflater.inflate(R.layout.layout_favorites_row, parent);
  
  
                  ImageView map_image = (ImageView) rowView.findViewById(R.id.route_image);
          TextView map_title = (TextView) rowView.findViewById(R.id.route_title);
          TextView map_author = (TextView) rowView.findViewById(R.id.route_author);
                  TextView map_length = (TextView) rowView.findViewById(R.id.route_length);
  
                  ImageView map_image_arrow = (ImageView) rowView.findViewById(R.id.route_arrow);
  
                  map_image.setBackgroundDrawable(drawables[position]);
                  map_title.setText(titles[position]);
                  map_author.setText(authors[position]);
                  map_length.setText(durations[position]);
                  map_image_arrow.setBackgroundDrawable(d);
  
  
          return rowView;
      }
          //----------------------------------------
  
          //----------------------------------------
          // Not Implemented
          //----------------------------------------
          public Object getItem(int arg0)
          {
              return null;
          }
  
          public long getItemId(int position)
          {
             return 0;
          }
  
          public int getCount()
          {
             if(titles == null)
              {
                  return 0;
              }
              return titles.length;
          }
              //----------------------------------------
      //----------------------------------------
  }
  </code></pre>
  
  <p>And the new error log adblog:</p>
  
  <pre><code>23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime  FATAL EXCEPTION: main
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime  java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.AdapterView.addView(AdapterView.java:461)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.LayoutInflater.inflate(LayoutInflater.java:416)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at RedPheasant.LoggerApp.Adapter_Maplist_Page_Favorites.getView(Adapter_Maplist_Page_Favorites.java:73)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.AbsListView.obtainView(AbsListView.java:1554)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.ListView.makeAndAddView(ListView.java:1793)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.ListView.fillDown(ListView.java:718)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.ListView.fillFromTop(ListView.java:775)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.ListView.layoutChildren(ListView.java:1646)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.AbsListView.onLayout(AbsListView.java:1384)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.View.layout(View.java:7228)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.ViewRoot.performTraversals(ViewRoot.java:1147)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.view.ViewRoot.handleMessage(ViewRoot.java:1867)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.os.Handler.dispatchMessage(Handler.java:99)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.os.Looper.loop(Looper.java:123)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at android.app.ActivityThread.main(ActivityThread.java:3687)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at java.lang.reflect.Method.invokeNative(Native Method)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at java.lang.reflect.Method.invoke(Method.java:507)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
  23:15:15.839    24746   ERROR   RedPheasant.LoggerApp   AndroidRuntime      at dalvik.system.NativeStart.main(Native Method)
  23:15:15.849    212 ERROR   #212        Dumpstate &gt; /data/log/dumpstate_app_error
  </code></pre>
  
  <p>Thx for the help so far... still getting the same error though.</p>
  
  <p><strong>Update:</strong></p>
  
  <p>I'm guessing this is my main problem right now:</p>
  
  <pre><code>java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
  </code></pre>
  
  <p>I'm guessing this has something to do with the Adapter that does not support the view. I am somewhat confused :p lol. Any ideas.</p>
  
  <p><strong>FINAL EDIT - SOLVED</strong>
  Thx for all the help guys. Its finally working and it looks great.</p>
  
  <p>The main problems where the way I assigned the drawables to the ImageViews which caused problems when doing the inflate. Thx Sam for pointing that out. Another major problem was that I had to add the false parameter to the inflate method to not copy it to the root. Thx Angelo for pointing this out.</p>