title: Custom Adapter for ListView
body: <p>I'm trying to make a customized ListView, that should display a note title and the time and date the note was created, each in separate TextView, while each Note title also colored by the color value stored in the DB. So I created a custom adapter for it:</p>
  
  <pre><code>public class NoteAdapter extends ArrayAdapter&lt;Note&gt; {
  
  public NoteAdapter(Context context, int resource, int textViewResourceId, List&lt;Note&gt; objects) {
      super(context, resource, textViewResourceId, objects);
  }
  
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
      // Creating the row
      View row = super.getView(position, convertView, parent);
  
      // Changing the text of time and date
      ((TextView)row.findViewById(R.id.noteTitle)).setText(getItem(position).getTitle());
      ((TextView)row.findViewById(R.id.noteTime)).setText(getItem(position).getTime());
      ((TextView)row.findViewById(R.id.noteDate)).setText(getItem(position).getDate());
  
      ((TextView)row.findViewById(R.id.noteTitle)).setTextColor(Color.parseColor(getItem(position).getColor()));
  
      // Returning the row
      return row;
      }
  }
  </code></pre>
  
  <p>And in the Main activity this is how I implement it:</p>
  
  <pre><code>...
  NoteAdapter adapter;
  NotesManager manager;
  private Note nNoteToDelete;
  ArrayList&lt;Note&gt; lstAllNotes;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
  
      // Setting onClickListener for the "Add note" button when the activity starts
      findViewById(R.id.btnAddNewNote).setOnClickListener(addNewNote);
  
      // INSTANTIATING
  
      // Manager - to manage all the DB manipulations
      manager = new NotesManager(this);
  
      // Retrieving all the notes in the DB
      lstAllNotes = manager.getAllNotes();
  
      // Setting the ArrayAdapter, to display retrieved data in the ListView
      //adapter = new ArrayAdapter&lt;Note&gt;(this, R.layout.note, lstAllNotes);
      adapter = new NoteAdapter(this, R.layout.main, R.id.noteTitle, lstAllNotes);
  
      // Setting the ListAdapter
      setListAdapter(adapter);
  
      // Registering for a single click action for each item in the ListView
      getListView().setOnItemClickListener(editNote);
  
      // Registering for a long click, which will pop up a context menu
      registerForContextMenu(getListView());
  
  }
  ...
  </code></pre>
  
  <p>But when I test the app, it immediately crashes. I'm getting these errors in LogCat:</p>
  
  <pre><code>08-08 08:59:52.291: E/AndroidRuntime(21268): FATAL EXCEPTION: main
  08-08 08:59:52.291: E/AndroidRuntime(21268): java.lang.NullPointerException
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at com.notepad.NoteAdapter.getView(NoteAdapter.java:24)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.AbsListView.obtainView(AbsListView.java:2267)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1244)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.ListView.onMeasure(ListView.java:1156)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.View.measure(View.java:15172)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.View.measure(View.java:15172)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.View.measure(View.java:15172)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.View.measure(View.java:15172)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.View.measure(View.java:15172)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.Choreographer.doFrame(Choreographer.java:525)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.os.Handler.handleCallback(Handler.java:615)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.os.Handler.dispatchMessage(Handler.java:92)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.os.Looper.loop(Looper.java:137)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at android.app.ActivityThread.main(ActivityThread.java:4745)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at java.lang.reflect.Method.invokeNative(Native Method)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at java.lang.reflect.Method.invoke(Method.java:511)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
  08-08 08:59:52.291: E/AndroidRuntime(21268):    at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>What am I missing here? Why does it keep crashing and how do I fix it?</p>