2016-03-31 29 views
-5

我的代碼使手機聯繫方式是電話號碼和聯繫name.I用下面的代碼,但它不是正確的搜索functionality.give我的工作爲更多的建議。我在線servers_adp.getFilter()獲取錯誤。filter(text);這裏顯示了getFilter的創建方法錯誤()我的代碼沒有搜索功能的作品

package com.syphersafe.securefiles; 
public class ContactsActivity extends BaseActivity{ 
EditText searchcontact_et; 
ArrayList<String> namearr,numarr,photoarr; 
ArrayAdapter<String> adp; 
ServerAdapter servers_adp; 
ListView lstContacts; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_contacts); 
    searchcontact_et=(EditText)findViewById(R.id.editTextSeachcontact); 
    servers_adp = new ServerAdapter(); 
    namearr = new ArrayList<String>(); 
    numarr  = new ArrayList<String>(); 
    photoarr = new ArrayList<String>(); 
    ListView lstContacts = (ListView) findViewById(R.id.lst_contacts); 
     searchcontact_et.addTextChangedListener(new TextWatcher() { 
private boolean mCountIncreased; 
@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) {} 
@Override 
      public void beforeTextChanged(CharSequence s, int start, int count,int after) {} 
    @Override 
    public void afterTextChanged(Editable s) { 
    String text =  searchcontact_et.getText().toString().toLowerCase(Locale.getDefault()); 
       servers_adp.getFilter().filter(text); 
      } 
     }); 
} 

protected void onStart() { 
    // TODO Auto-generated method stub 

    Cursor cursornum = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
    if (cursornum != null) { 
     while (cursornum.moveToNext()) { 
      String contactname = cursornum.getString(cursornum.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String contactnum = cursornum.getString(cursornum.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

      namearr.add(contactname); 
      numarr.add(contactnum); 
      //photoarr.add(photoPath); 
     } 
    }lstContacts = (ListView) findViewById(R.id.lst_contacts); 
    lstContacts.setAdapter(servers_adp);super.onStart(); 
} 
public class ServerAdapter extends BaseAdapter{ 
public int getCount() { 
    // TODO Auto-generated method stub 
    return namearr.size(); 
} 
public Object getFilter() { 
    // TODO Auto-generated method stub 
    return new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults results = new FilterResults(); 

      if (constraint == null || constraint.length() == 0) { 
       //no constraint given, just return all the data. (no search) 
       results.count = list.size(); 
       results.values = list; 
      } else {//do the search 
       List<String> resultsData = new ArrayList<>(); 
       String searchStr = constraint.toString().toUpperCase(); 
       for (String s : list) 
        if (s.toUpperCase().contains(searchStr)) resultsData.add(s); 
       results.count = resultsData.size(); 
       results.values = resultsData; 
      } 

      return results; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      listFiltered = (ArrayList<String>) results.values; 
      notifyDataSetChanged(); 
     } 
    }; 
} 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    View v = null; 
    LayoutInflater inflater = getLayoutInflater(); 
    v = inflater.inflate(R.layout.lv_layout, null); 
    TextView contact_name = (TextView)v.findViewById(R.id.contact_name); 
    ImageView contact_photo = (ImageView)v.findViewById(R.id.contact_photo); 
    TextView contact_num=(TextView)findViewById(R.id.contact_number); 
    try { 
     String arlstname[] = namearr.get(position).split(","); 
     String arlstnumber[] = numarr.get(position).split(","); 
     for (int i = 0; i < arlstname.length; i++) { 
      contact_name.setText(arlstname[i]); 
      contact_num.setText(arlstnumber[i]); 
      if(arlstname[i].equals("Lav")|| arlstname[i].equals("Teja")){ 
       Drawable myDrawable = getResources().getDrawable(R.drawable.call_person); 
       contact_photo.setImageDrawable(myDrawable); 
       } 
      else{ 
       Drawable myDrawable = getResources().getDrawable(R.drawable.ic_launcher); 
       contact_photo.setImageDrawable(myDrawable); 
       } 
     } 
    } 
    catch (Exception e) { 
     // TODO: handle exception 
    } 
    return v; 
} 
} 
} 
+0

請出示您的過濾器類,所以我們可以調試。 –

+0

我後我整個的代碼來實現該功能,請建議爲filtring – santhi

回答

0

首先使您的適配器實現可過濾。您將收到錯誤添加方法。添加方法

public Filter getFilter() { 
    } 

這方法複製粘貼內內的公共對象用getFilter()方法的所有代碼。一旦你完成了刪除公共對象getFilter()方法。

它應該工作。

public class ContactsActivity extends BaseActivity{ 
EditText searchcontact_et; 
ArrayList<String> namearr,numarr,photoarr; 
ArrayAdapter<String> adp; 
ServerAdapter servers_adp; 
ListView lstContacts; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_contacts); 
    searchcontact_et=(EditText)findViewById(R.id.editTextSeachcontact); 
    servers_adp = new ServerAdapter(); 
    namearr = new ArrayList<String>(); 
    numarr  = new ArrayList<String>(); 
    photoarr = new ArrayList<String>(); 
    ListView lstContacts = (ListView) findViewById(R.id.lst_contacts); 
    searchcontact_et.addTextChangedListener(new TextWatcher() { 
     private boolean mCountIncreased; 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) {} 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count,int after) {} 
     @Override 
     public void afterTextChanged(Editable s) { 
      String text =  searchcontact_et.getText().toString().toLowerCase(Locale.getDefault()); 
      servers_adp.getFilter().filter(text); 
     } 
    }); 
} 

protected void onStart() { 
    // TODO Auto-generated method stub 

    Cursor cursornum = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
    if (cursornum != null) { 
     while (cursornum.moveToNext()) { 
      String contactname = cursornum.getString(cursornum.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String contactnum = cursornum.getString(cursornum.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

      namearr.add(contactname); 
      numarr.add(contactnum); 
      //photoarr.add(photoPath); 
     } 
    }lstContacts = (ListView) findViewById(R.id.lst_contacts); 
    lstContacts.setAdapter(servers_adp);super.onStart(); 
} 
public class ServerAdapter extends BaseAdapter implements Filterable{ 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return namearr.size(); 
    } 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View v = null; 
     LayoutInflater inflater = getLayoutInflater(); 
     v = inflater.inflate(R.layout.lv_layout, null); 
     TextView contact_name = (TextView)v.findViewById(R.id.contact_name); 
     ImageView contact_photo = (ImageView)v.findViewById(R.id.contact_photo); 
     TextView contact_num=(TextView)findViewById(R.id.contact_number); 
     try { 
      String arlstname[] = namearr.get(position).split(","); 
      String arlstnumber[] = numarr.get(position).split(","); 
      for (int i = 0; i < arlstname.length; i++) { 
       contact_name.setText(arlstname[i]); 
       contact_num.setText(arlstnumber[i]); 
       if(arlstname[i].equals("Lav")|| arlstname[i].equals("Teja")){ 
        Drawable myDrawable = getResources().getDrawable(R.drawable.call_person); 
        contact_photo.setImageDrawable(myDrawable); 
       } 
       else{ 
        Drawable myDrawable = getResources().getDrawable(R.drawable.ic_launcher); 
        contact_photo.setImageDrawable(myDrawable); 
       } 
      } 
     } 
     catch (Exception e) { 
      // TODO: handle exception 
     } 
     return v; 
    } 

    @Override 
    public Filter getFilter() { 
     return new Filter() { 
      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       FilterResults results = new FilterResults(); 

       if (constraint == null || constraint.length() == 0) { 
        //no constraint given, just return all the data. (no search) 
        results.count = list.size(); 
        results.values = list; 
       } else {//do the search 
        List<String> resultsData = new ArrayList<>(); 
        String searchStr = constraint.toString().toUpperCase(); 
        for (String s : list) 
         if (s.toUpperCase().contains(searchStr)) resultsData.add(s); 
        results.count = resultsData.size(); 
        results.values = resultsData; 
       } 

       return results; 
      } 

      @Override 
      protected void publishResults(CharSequence constraint, FilterResults results) { 
       listFiltered = (ArrayList<String>) results.values; 
       notifyDataSetChanged(); 
      } 
     }; 
    } 
} 

}

+0

我加入實施過濾的,但裏面的過濾器類顯示errors.please共享爲 – santhi

+0

什麼錯誤相應代碼正確的解決方案,你得到 –

+0

演員錯誤的「返回新的過濾器(){};這個 – santhi