2016-08-06 21 views
-3

Ich möchte die Kontaktnummer in ListView anzeigen. Und es funktioniert perfekt. Aber ich möchte Bedingung stellen, wenn es Kontakt vom Gerät liest. Der Zustand sindWie bekomme ich Kontaktnummern vom Gerät?

  1. wenn Nummer digit <10 {--don't in Listen- hinzufügen}.

  2. else if (Nummer beginnt bei 0 dann durch 91 ersetzen) {- Zur Liste hinzufügen}.

  3. sonst wenn {Nummer beginnt von + dann entfernen} {- zur Liste hinzufügen}.

  4. sonst {andere sind direkt zur Liste hinzufügen}.

Hier ist mein Code:

public class ReferFriend extends AppCompatActivity { 

    ArrayList<SelectUser> selectUsers; 
    List<SelectUser> temp; 

    ListView listView; 

    Cursor phones, email; 


    ContentResolver resolver; 
    SearchView search; 
    SelectUserAdapter adapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.refer_friend); 

     selectUsers = new ArrayList<SelectUser>(); 
     resolver = this.getContentResolver(); 
     listView = (ListView) findViewById(R.id.contacts_list); 

     phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); 
     LoadContact loadContact = new LoadContact(); 
     loadContact.execute(); 
    } 

    // Load data on background 
    class LoadContact extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

     } 

     @Override 
     protected Void doInBackground(Void... voids) { 
      // Get Contact list from Phone 

      if (phones != null) { 
       Log.e("count", "" + phones.getCount()); 
       if (phones.getCount() == 0) { 
        Toast.makeText(ReferFriend.this, "No contacts in your contact list.", Toast.LENGTH_LONG).show(); 
       } 

       while (phones.moveToNext()) { 
        Bitmap bit_thumb = null; 
        String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); 
        String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
        String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        String image_thumb = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI)); 
        try { 
         if (image_thumb != null) { 
          bit_thumb = MediaStore.Images.Media.getBitmap(resolver, Uri.parse(image_thumb)); 
         } else { 
          Log.e("No Image Thumb", "--------------"); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 

        SelectUser selectUser = new SelectUser(); 
        selectUser.setThumb(bit_thumb); 
        selectUser.setContactName(name); 
        selectUser.setPhone(phoneNumber); 
        selectUser.setContactEmail(id); 
        selectUser.setCheckedBox(false); 
        selectUsers.add(selectUser); 
       } 
      } else { 
       Log.e("Cursor close 1", "----------------"); 
      } 
      //phones.close(); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
      adapter = new SelectUserAdapter(selectUsers, ReferFriend.this); 
      listView.setAdapter(adapter); 

      // Select item on listclick 
      listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

        Log.e("search", "here---------------- listener"); 

        SelectUser data = selectUsers.get(i); 
       } 
      }); 

      listView.setFastScrollEnabled(true); 
     } 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     phones.close(); 
    } 

    public class SelectUserAdapter extends BaseAdapter { 

     public List<SelectUser> _data; 
     private ArrayList<SelectUser> arraylist; 
     Context _c; 
     ViewHolder v; 
     RoundImage roundedImage; 

     public SelectUserAdapter(List<SelectUser> selectUsers, Context context) { 
      _data = selectUsers; 
      _c = context; 
      this.arraylist = new ArrayList<SelectUser>(); 
      this.arraylist.addAll(_data); 
     } 

     @Override 
     public int getCount() { 
      return _data.size(); 
     } 

     @Override 
     public Object getItem(int i) { 
      return _data.get(i); 
     } 

     @Override 
     public long getItemId(int i) { 
      return i; 
     } 

     @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
     @Override 
     public View getView(int i, View convertView, ViewGroup viewGroup) { 
      View view = convertView; 
      if (view == null) { 
       LayoutInflater li = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view = li.inflate(R.layout.contact_info, null); 
       Log.e("Inside", "here--------------------------- In view1"); 
      } else { 
       view = convertView; 
       Log.e("Inside", "here--------------------------- In view2"); 
      } 

      v = new ViewHolder(); 

      v.title = (TextView) view.findViewById(R.id.name); 
      v.check = (CheckBox) view.findViewById(R.id.check); 
      v.phone = (TextView) view.findViewById(R.id.no); 
      v.imageView = (ImageView) view.findViewById(R.id.pic); 

      final SelectUser data = (SelectUser) _data.get(i); 
      v.title.setText(data.getContactName()); 
      v.check.setChecked(data.getCheckedBox()); 
      //v.phone.setText(data.getPhone()); 

      //I want to apply that condition here 

      /*if (data.getPhone().length() <= 10) { 
       v.phone.setText("Contact not Added to list"); 
      } else if(data.getPhone().length() == 10){ 
       v.phone.setText(data.getPhone()); 
      } else if(data.getPhone().equalsIgnoreCase("+")){ 
       v.phone.setText(data.getPhone()); 
      }else if(data.getPhone().startsWith("0")){ 
       v.phone.setText(data.getPhone().replace(0,91)); 
      }*/ 

      view.setTag(data); 
      return view; 
     } 

     // Filter Class 
     public void filter(String charText) { 
      charText = charText.toLowerCase(Locale.getDefault()); 
      _data.clear(); 
      if (charText.length() == 0) { 
       _data.addAll(arraylist); 
      } else { 
       for (SelectUser wp : arraylist) { 
        if (wp.getContactName().toLowerCase(Locale.getDefault()) 
          .contains(charText)) { 
         _data.add(wp); 
        } 
       } 
      } 
      notifyDataSetChanged(); 
     } 
     class ViewHolder { 
      ImageView imageView; 
      TextView title, phone; 
      CheckBox check; 
     } 
    } 
} 
+0

Beantwortet diese Frage, was Sie fragen? http://stackoverflow.com/questions/15243278/android-get-all-contacts-telephone-number-in-arraylist – Sufian

+0

Vielen Dank, dass ich es lösen .. – user6657179

+0

Wenn der obige Link für Sie arbeitete, akzeptieren Sie es bitte als Duplikat. – Sufian

Antwort

0

vor dem Kontakt aufschreiben Validierungsfunktion hinzufügen, wird es alle erforderlichen Bedingungen validieren. Wenn Validierungserfolg, dann wird diese Funktion wahr zurückgeben, sonst falsch. Wenn Sie den Wert true erhalten, fügen Sie diesen Kontakt zum selectUser-Objekt hinzu, andernfalls fügen Sie ihn nicht hinzu.

+0

Ich werde bereits eine Bedingung hinzugefügt, aber sie sind nicht in der richtigen Weise geschrieben, dass Code in meinem Beitrag Kommentarblock ist. Plz chk es und gebe mir die Lösung – user6657179

0
SelectUser selectUser = new SelectUser(); 
      selectUser.setThumb(bit_thumb); 
      selectUser.setContactName(name); 
      selectUser.setPhone(phoneNumber); 
      selectUser.setContactEmail(id); 
      selectUser.setCheckedBox(false); 


      //object preparation 
      Boolean flag = prepareObject(selectUser); 

      if(flag){ 
      //add valid object to arraylist 
      selectUsers.add(selectUser); 
      }else{ 
      //invalid contact details 
      } 

      //method to validate and update object 
      public Boolean prepareObject(SelectUser obj){ 

       if(obj.getPhone.lenght < 10) { 
        //dont add to list 
       }else{ 

        String temp = obj.getPhone.charAt(0); 
        if(temp == "0"){ 

         //replace it with 91 and update object 

         return true 
        }else if(temp == "+"){ 

         //remove it and update object 
         return true 

        }else{ 

        //add to object 
        return true 
        } 

       } 


       return false; 
      } 

Ich hatte den logischen Code für Ihr Problem geschrieben. tun Sie einfach notwendige Änderungen daran und es wird sicherlich funktionieren.

Sie fügen Objekt direkt zu arraylist hinzu, ohne Ihre Bedingungen zu überprüfen. Sie schreiben Bedingungen auf Adapter, der falsch ist, Apdater wird nur Daten von Arraylist. Wenn Sie gültige Daten in Arraylist haben, dann gibt es keine Notwendigkeit, Bedingungen auf Adapter zu setzen.

+0

Okay @Dnyanesh Ich werde das versuchen. Danke – user6657179

+0

Fehler in dieser Zeile obj.getPhone.lenght <10) und String temp = obj.getPhone.charAt (0); kann das Symbol getPhone nicht finden .. – user6657179