title: Android: Issue with newView and bindView in custom SimpleCursorAdapter
body: <p>I created a custom SimpleCursorAdapter from one of <a href="http://thinkandroid.wordpress.com/2010/01/11/custom-cursoradapters/">the only example I found</a>.</p>
  
  <p>When my ListActivity is called, newView and bindView are called for every of my DB entry, and called again for every entry. I've got a few questions:</p>
  
  <p>-is the example right (if not, where can I find one)?</p>
  
  <p>-if bindView call is always preceded by newView call, why doing the same in both functions?</p>
  
  <p>-why is the sequence newView-bindView called twice for every item?</p>
  
  <p>-why some CursorAdapter examples use getView instead of newView and bindView?</p>
  
  <p>Basically, how should SimpleCursorAdapter be used, and what's wrong with my code?</p>
  
  <p>Thanks</p>
  
  <hr>
  
  <p>ListActivity</p>
  
  <pre><code>public class ContactSelection extends ListActivity {
  
      private WhipemDBAdapter mDbHelper;
      private FriendAdapter friendAdapter;
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          mDbHelper = new WhipemDBAdapter(this);
          mDbHelper.open();     
  
          setContentView(R.layout.contact_list);   
  
          Cursor c = mDbHelper.fetchAllFriends();
          startManagingCursor(c);     
          String[] from = new String[] {};
          int[] to = new int[] {};
  
          this.friendAdapter = new FriendAdapter(this, R.layout.contact_row, c, from, to);
          setListAdapter(this.friendAdapter);
  
          getListView().setItemsCanFocus(false);
          getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
      }
  
      @Override
      protected void onResume() {
          super.onResume();
          mDbHelper.open();
      }
  
      @Override
      protected void onPause() {
          super.onPause();
          mDbHelper.close();
      }
  }
  </code></pre>
  
  <p>Custom SimpleCursorAdapter</p>
  
  <pre><code>public class FriendAdapter extends SimpleCursorAdapter implements OnClickListener {
  
      private Context mContext;
      private int mLayout;
  
      public FriendAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
          super(context, layout, c, from, to);
  
          this.mContext = context;
          this.mLayout = layout;
      }
  
      @Override
      public View newView(Context context, Cursor cursor, ViewGroup parent) {
  
          Cursor c = getCursor();
  
          final LayoutInflater inflater = LayoutInflater.from(context);
          View v = inflater.inflate(mLayout, parent, false);     
  
          String name = c.getString(c.getColumnIndex(WhipemDBAdapter.KEY_NAME));
          String fb_id = c.getString(c.getColumnIndex(WhipemDBAdapter.KEY_FB_ID));
  
          TextView name_text = (TextView) v.findViewById(R.id.contact_name);
          if (name_text != null) {
              name_text.setText(name);
          }
  
          ImageView im = (ImageView) v.findViewById(R.id.contact_pic);            
          Drawable drawable = LoadImageFromWebOperations("http://graph.facebook.com/"+fb_id+"/picture");
          if (im != null) {
              im.setImageDrawable(drawable);
          }
  
          CheckBox bCheck = (CheckBox) v.findViewById(R.id.checkbox);
          if (im != null) {
              bCheck.setTag(fb_id);
          }            
  
          if (((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id))
              bCheck.setChecked(true);
  
          bCheck.setOnClickListener(this);
  
          return v;
      }
  
      @Override
      public void bindView(View v, Context context, Cursor c) {
  
           String name = c.getString(c.getColumnIndex(WhipemDBAdapter.KEY_NAME));
           String fb_id = c.getString(c.getColumnIndex(WhipemDBAdapter.KEY_FB_ID));
  
  
           TextView name_text = (TextView) v.findViewById(R.id.contact_name);
           if (name_text != null) {
               name_text.setText(name);
           }
  
          ImageView im = (ImageView) v.findViewById(R.id.contact_pic);            
          Drawable drawable = LoadImageFromWebOperations("http://graph.facebook.com/"+fb_id+"/picture");
          if (im != null) {
              im.setImageDrawable(drawable);
          }
  
          CheckBox bCheck = (CheckBox) v.findViewById(R.id.checkbox);
          if (im != null) {
              bCheck.setTag(fb_id);
          }
  
          ArrayList&lt;String&gt; dude = ((GlobalVars) mContext.getApplicationContext()).getSelectedFriendList();
  
          if (((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id))
              bCheck.setChecked(true);
  
          bCheck.setOnClickListener(this);
      }
  
  
      @Override
      public void onClick(View v) {
          CheckBox cBox = (CheckBox) v;
          String fb_id = (String) cBox.getTag();
  
          if (cBox.isChecked()) {
              if (!((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id))
                  ((GlobalVars) mContext.getApplicationContext()).addSelectedFriend(fb_id);
          } else {
              if (((GlobalVars) mContext.getApplicationContext()).isFriendSelected(fb_id))
                  ((GlobalVars) mContext.getApplicationContext()).removeSelectedFriend(fb_id);
          }
  
      }
  
      private Drawable LoadImageFromWebOperations(String url)
      {
          try
          {
              InputStream is = (InputStream) new URL(url).getContent();
              Drawable d = Drawable.createFromStream(is, "src name");
              return d;
          }catch (Exception e) {
              System.out.println("Exc="+e);
              return null;
          }
      }
  
  }
  </code></pre>