2016-06-22 7 views
0

私は招待状のリストを持っています。私はrecyclerviewとカスタムアダプターを使用しています。これで私はコンタクト番号でフェッチされたcontactIdによってコンタクトから写真を取得しています。onBindViewHolderのリストの各行にイメージを設定するにはどうすればいいですか?

イメージビューにimageUriを設定しました。 imageUriがnullでないすべての行に1つのイメージしか表示されません。そして、上下にスクロールすると位置が変わります。ときどきそれはイメージを表示し、時にはそれはない。

私は招待状の位置ごとにURIを設定します。これを行う方法?

アダプタ:

public class InviteeAdapter extends RecyclerView.Adapter<InviteeAdapter.MyViewHolder>{ 


    private List<Invitee> inviteeList; 
    int status; 
    Context context; 
    Cursor mCursor; 

    private ArrayList<Uri> imageArray; 
    public String contactId; 


    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView name; 
     public com.github.siyamed.shapeimageview.CircularImageView profileImage; 

     String mobileNo; 


     public MyViewHolder(View view) { 

      super(view); 
      name = (TextView) view.findViewById(R.id.scheduleName); 
      profileImage = (com.github.siyamed.shapeimageview.CircularImageView) view.findViewById(R.id.eventsIcon); 

      imageArray = new ArrayList<>(); 
     } 

     public String fetchContactIdFromPhoneNumber(String phoneNumber) { 
      Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, 
        Uri.encode(phoneNumber)); 
      Cursor cursor = context.getContentResolver().query(uri, 
        new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}, 
        null, null, null); 

      String contactId = ""; 

      if (cursor.moveToFirst()) { 
       do { 
        contactId = cursor.getString(cursor 
          .getColumnIndex(ContactsContract.PhoneLookup._ID)); 
       } while (cursor.moveToNext()); 
      } 

      return contactId; 
     } 

    } 

    public InviteeAdapter(List<Invitee> inviteeList,Context context) { 
     this.inviteeList = inviteeList; 
     this.context = context; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.invitee_card, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 

     Uri imageUri; 

     Invitee invitee = new Invitee(); 

     invitee = inviteeList.get(position); 
     holder.name.setText(invitee.getFName()+" "+ invitee.getLName()); 

     contactId = holder.fetchContactIdFromPhoneNumber(invitee.getMobile()); 

     ArrayList<String> contactArray = new ArrayList<>(); 

     imageUri = getPhotoUri(); 

     imageArray.add(getPhotoUri()); 

     contactArray.add(contactId); 

     for(Uri id : imageArray) 
     { 
      // imageUri = getPhotoUri(); 

      if(imageUri!= null) { 

       holder.profileImage.setImageURI(id); 
      } 
      else { 

       holder.profileImage.setBackgroundResource(R.drawable.ic_person_black_48dp); 

      } 

     } 

     /* status = invitee.; 

     if(status == 0) 
     { 
      holder.name.setTextColor(context.getResources().getColor(R.color.colorAccent)); 

     } 

     else { 

      holder.name.setTextColor(context.getResources().getColor(R.color.grey)); 
     }*/ 


    } 


    public Uri getPhotoUri() { 
     try { 
      Cursor cur = context.getContentResolver().query(
        ContactsContract.Data.CONTENT_URI, 
        null, 
        ContactsContract.Data.CONTACT_ID + "=" + contactId + " AND " 
          + ContactsContract.Data.MIMETYPE + "='" 
          + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null, 
        null); 
      if (cur != null) { 
       if (!cur.moveToFirst()) { 
        return null; // no photo 
       } 
      } else { 
       return null; // error in cursor process 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 
     Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long 
       .parseLong(contactId)); 
     return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
    } 

    @Override 
    public int getItemCount() { 
     return inviteeList.size(); 
    } 

} 

誰かが助けてくださいことができます。ありがとう..

答えて

関連する問題