2012-02-02 3 views
0

Я хочу настроить просмотр вставки в простой адаптер, чтобы показывать фотографии из контактов, однако я установил два текстовых вида с именем и номером с помощью Hash Map, поэтому третьим значением является Image View, где я хочу поставить контактную фотографию, соответствующую идентификатору контакта. Спасибо, Волк.Установить привязку в простом адаптере?

Вот мой код:

ArrayList<HashMap<String, String>> mapa = new ArrayList<HashMap<String, String>>(); 

      ContentResolver cr = getContentResolver(); 
      Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

      if(cur.getCount() > 0){ 
       while(cur.moveToNext()){ 
        id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
        String photoUri = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)); 

        if(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0){ 

         final Cursor numCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); 


         for(numCur.moveToFirst(); !numCur.isAfterLast(); numCur.moveToNext()){ 

          brTel = numCur.getString(numCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
          ime = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 


          tmpIme = new String[] {ime}; 


          for(int i = 0; i < tmpIme.length; i++){ 

           HashMap<String, String> imeMapa = new HashMap<String, String>(); 
           imeMapa.put("imeLista", ime); 
           imeMapa.put("checkBox", photoUri); 
           imeMapa.put("Mobilni", brTel); 
           mapa.add(imeMapa); 

          } 

         } 
         numCur.close(); 

        } 

       } // While 
      } 

      SimpleAdapter sa = new SimpleAdapter(getApplicationContext(), mapa, R.layout.imenik, new String[] {"imeLista", "checkBox", "Mobilni"}, new int[] {R.id.tvImeImenik, R.id.cbOznaci, R.id.tvSamoProba}); 
      sa.setViewBinder(simpleSlika); 
      lImenik.setAdapter(sa); 

и мой взгляд связующее:

private final SimpleAdapter.ViewBinder simpleSlika = new SimpleAdapter.ViewBinder() { 

      public boolean setViewValue(View view, Object data, 
        String textRepresentation) { 

       if (view instanceof ImageView && data instanceof Bitmap) { 
        ImageView v = (ImageView)view; 
        v.setImageBitmap((Bitmap)data); 
        // return true to signal that bind was successful 
        return true; 
       } 
       return false; 

      } 
     }; 

, но это не работает. Помогите пожалуйста ???

+0

Возможно, проще всего создать настраиваемый базовый адаптер для просмотра списка? – goodm

+0

Возможно, но можно ли так? – Wolf87

ответ

0

Да, это возможно, вы просто создаете свой собственный адаптер (расширяет BaseAdapter), переопределяете метод getView и добавляете растровое изображение в изображение.

public ContactAdapter(Activity a,ArrayList<Object> list) 
    { 
      activity = a; 
      inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
      View v=convertView; 
      if(convertView==null) 
      v = inflater.inflate(R.layout.contact, null); 
      ImageView image = (ImageView)v.findViewById(R.id.img); 
    } 

Нечто подобное. Вы должны это расширять. Проверьте также: Lazy load of images in ListView

Смежные вопросы