使用android搜索视图小部件进行搜索后未显示正确位置

使用android搜索视图小部件进行搜索后未显示正确位置,android,listview,searchview,Android,Listview,Searchview,我想在我的android应用程序中搜索列表视图,所以我使用了android搜索视图小部件。我成功实现了搜索,但搜索后问题出现了。 当我搜索时,它会给我过滤结果,但当我点击过滤项目时,它会给我错误的位置。 请帮我做这个 main活动 public class MainActivity extends AppCompatActivity implements SlidingPaneLayout.PanelSlideListener, android.widget.SearchView.OnQu

我想在我的android应用程序中搜索列表视图,所以我使用了android搜索视图小部件。我成功实现了搜索,但搜索后问题出现了。 当我搜索时,它会给我过滤结果,但当我点击过滤项目时,它会给我错误的位置。 请帮我做这个

main活动

public class MainActivity extends AppCompatActivity implements 
SlidingPaneLayout.PanelSlideListener,
  android.widget.SearchView.OnQueryTextListener
  {
    public static ListView mcontact;
  RelativeLayout right, left;

  public static ArrayList<Contacts> mList;
   MyContactsAdapter mMyContactsAdapter;
   SlidingPaneLayout sp;
   Context context=this;
   android.widget.SearchView sv;
    public static String number;
   public static String email;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    context = this;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    right = (RelativeLayout) findViewById(R.id.rightSide);
    left = (RelativeLayout) findViewById(R.id.leftSide);
    mcontact = (ListView) findViewById(R.id.contact);

    sv= (android.widget.SearchView) findViewById(R.id.searchView1);

    sp = (SlidingPaneLayout) findViewById(R.id.Sliding);
    assert sp != null;
    sp.setSliderFadeColor(Color.TRANSPARENT);
    sp.openPane();
    mList = new ArrayList<Contacts>();
    readContacts();
    mcontact.setTextFilterEnabled(true);

    mcontact.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
          number=mList.get(position).getNumber();
          email=mList.get(position).getEmail();
           view.setSelected(true);
    }
    });

    setupSearchView();
}

private void setupSearchView()
{
    sv.setIconifiedByDefault(false);
    sv.setOnQueryTextListener(this);
    sv.setSubmitButtonEnabled(true);
    sv.setQueryHint("Search Here");
}

public void readContacts() {

    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);
    String phone = null;
    String emailContact = null;
    String emailType = null;
    String image_uri = "";
    Bitmap bitmap = null;
    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            String id = cur.getString(cur
                    .getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur
                    .getString(cur
                            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            image_uri = cur
                    .getString(cur
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
            if (Integer
                    .parseInt(cur.getString(cur
                            .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                System.out.println("name : " + name + ", ID : " + id);

                Cursor pCur = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                + " = ?", new String[]{id}, null);
                while (pCur.moveToNext())
                {
                    phone = pCur
                            .getString(pCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                    System.out.println("phone" + phone);
                }
                pCur.close();

                Cursor emailCur = cr.query
                        (
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID
                                + " = ?", new String[]{id}, null);
                while (emailCur.moveToNext())
                {
                    emailContact = emailCur
                            .getString(emailCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

                    if(TextUtils.isEmpty(emailContact)||emailContact.equalsIgnoreCase(null)||emailContact.equalsIgnoreCase("")){
                        emailContact="";

                        Log.e("isEmpty","isEmpty " + emailContact);
                    }else{
                        Log.e("gfdszfg","Email " + emailContact);
                    }
                  /*  emailType = emailCur
                            .getString(emailCur
                                    .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));*/

                    Log.e("gfdszfg","Email " + emailContact);

                }

                emailCur.close();
            }

            if (image_uri != null) {
                System.out.println(Uri.parse(image_uri));
                try {
                    bitmap = MediaStore.Images.Media
                            .getBitmap(this.getContentResolver(),
                                    Uri.parse(image_uri));

                    System.out.println(bitmap);

                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            mList.add(new Contacts(name, phone, image_uri,emailContact));
            emailContact="";
        }
        cur.close();
        mMyContactsAdapter = new MyContactsAdapter(MainActivity.this, mList);
        mcontact.setAdapter(mMyContactsAdapter);
    }
}

@Override
public void onPanelSlide(View panel, float slideOffset)
{

}

@Override
public void onPanelOpened(View panel) {
    left.setVisibility(View.VISIBLE);
}

@Override
public void onPanelClosed(View panel)
{
    left.setVisibility(View.VISIBLE);
}

@Override
public boolean onQueryTextSubmit(String query)
{
    return false;
}

@Override
public boolean onQueryTextChange(String newText)
{
    if (TextUtils.isEmpty(newText)) {
        mcontact.clearTextFilter();
        mMyContactsAdapter.getFilter().filter("");
    } else {
        mcontact.setFilterText(newText);
    }
    return true;
}
public类MainActivity扩展了AppCompatActivity实现
SlideingPanelAyout.PanelSlideListener,
android.widget.SearchView.OnQueryTextListener
{
公共静态ListView mcontact;
相对左、右;
公共静态数组列表;
支原体接触者;支原体接触者;
滑动面板布局sp;
上下文=这个;
android.widget.SearchView sv;
公共静态字符串号;
公共静态字符串电子邮件;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
上下文=这个;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
right=(RelativeLayout)findViewById(R.id.rightSide);
left=(RelativeLayout)findViewById(R.id.leftSide);
mcontact=(ListView)findViewById(R.id.contact);
sv=(android.widget.SearchView)findviewbyd(R.id.searchView1);
sp=(滑动面板布局)findViewById(R.id.滑动);
断言sp!=null;
sp.setSliderFadeColor(彩色透明);
sp.openPane();
mList=新的ArrayList();
readContacts();
mcontact.setTextFilterEnabled(true);
setOnItemClickListener(新的AdapterView.OnItemClickListener()
{
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
number=mList.get(position.getNumber();
email=mList.get(position.getEmail();
view.setSelected(true);
}
});
setupSearchView();
}
私有void setupSearchView()
{
sv.setIconifiedByDefault(假);
sv.setOnQueryTextListener(此);
sv.setSubmitButtonEnabled(真);
sv.setQueryHint(“在此处搜索”);
}
公共联系人(){
ContentResolver cr=getContentResolver();
Cursor cur=cr.query(Contacts contract.Contacts.CONTENT\u URI,null,
空,空,空);
字符串phone=null;
字符串emailContact=null;
字符串类型=null;
字符串图像_uri=“”;
位图=空;
如果(cur.getCount()>0){
while(cur.moveToNext()){
字符串id=cur.getString(cur
.getColumnIndex(Contacts contract.Contacts._ID));
字符串名称=cur
.getString(cur)
.getColumnIndex(Contacts contract.Contacts.DISPLAY_NAME));
image_uri=cur
.getString(cur)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.PHOTO_URI));
if(整数
.parseInt(cur.getString(cur
.getColumnIndex(Contacts contract.Contacts.HAS_PHONE_NUMBER))>0){
System.out.println(“名称:+name+”,ID:+ID);
游标pCur=cr.query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
无效的
Contacts contract.CommonDataTypes.Phone.CONTACT\u ID
+“=?”,新字符串[]{id},null);
while(pCur.moveToNext())
{
电话=pCur
.getString(pCur)
.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
System.out.println(“电话”+电话);
}
pCur.close();
游标emailCur=cr.query
(
ContactsContract.CommonDataTypes.Email.CONTENT\u URI,
无效的
ContactsContract.CommonDataTypes.Email.CONTACT\u ID
+“=?”,新字符串[]{id},null);
while(emailCur.moveToNext())
{
emailContact=emailCur
.getString(emailCur)
.getColumnIndex(ContactsContract.CommonDataTypes.Email.DATA));
if(TextUtils.isEmpty(emailContact)| | emailContact.equalsIgnoreCase(null)| | emailContact.equalsIgnoreCase(“”){
emailContact=“”;
Log.e(“isEmpty”、“isEmpty”+电子邮件联系人);
}否则{
Log.e(“gfdszfg”、“电子邮件”+电子邮件联系人);
}
/*emailType=emailCur
.getString(emailCur)
.getColumnIndex(ContactsContract.CommonDataTypes.Email.TYPE))*/
Log.e(“gfdszfg”、“电子邮件”+电子邮件联系人);
}
emailCur.close();
}
if(image_uri!=null){
System.out.println(Uri.parse(image_-Uri));
试一试{
位图=MediaStore.Images.Media
.getBitmap(此.getContentResolver(),
parse(image_Uri));
System.out.println(位图);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
添加(新联系人(姓名、电话、图像、电子邮件联系人));
emailContact=“”;
}
cur.close();
mMyContactsAdapter=新的MyContactsAdapter(MainActivity.this,mList);
设置适配器(mMyContactsAdapter);
}
}
@凌驾
公共空心面板幻灯片(视图面板、浮动幻灯片偏移)
{
}
@爱
 public class MyContactsAdapter extends BaseAdapter implements Filterable
{
private Context mContext;
ArrayList<Contacts> coverList;
public  ArrayList<Contacts> orig;
private ColorGenerator mColorGenerator = ColorGenerator.MATERIAL;
private TextDrawable.IBuilder mDrawableBuilder;

public MyContactsAdapter(Context c, ArrayList<Contacts> coverList)
{
    super();
    mContext = c;
    this.coverList = coverList;

}

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

@Override
public Contacts getItem(int position) {
    return coverList.get(position);
}

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

@Override
public View getView(final int position, View convertView, 
final ViewGroup parent)
{

    View grid = null;
    convertView = null;
    LayoutInflater inflater = (LayoutInflater) mContext
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null)
    {
        grid = new View(mContext);

        grid = inflater.inflate(R.layout.list_item, parent, false);
        TextView nameTxt = (TextView) grid.findViewById(R.id.name_entry);
        final TextView numTxt = (TextView) 
        grid.findViewById(R.id.number_entry);
        final TextView emailTxt = (TextView) grid.findViewById(R.id.email);
        final ImageView adImage = (ImageView) 
          grid.findViewById(R.id.profile_pic);
        grid.setTag(adImage);

        nameTxt.setText(coverList.get(position).getName());
        numTxt.setText(coverList.get(position).getNumber());
        emailTxt.setText(coverList.get(position).getEmail());
        Log.e("NUMBER","dxdd"+coverList.get(position).getEmail());
        if (TextUtils.isEmpty(coverList.get(position).getImage()) || coverList.get(position).getImage().equalsIgnoreCase(null))
        {
            mDrawableBuilder = TextDrawable.builder()
                    .beginConfig()
                    .withBorder(4)
                    .endConfig()
                    .round();
            TextDrawable drawable =                
mDrawableBuilder.build(String.valueOf(coverList.get(position)
.getName().
charAt(0)), mColorGenerator.getColor(coverList.get(position).getName()));

         adImage.setImageDrawable(drawable);
        } else
        {
            //     System.out.println(Uri.parse(coverList.get(position).getImage()));

            Picasso.with(mContext)
                    .load(coverList.get(position).getImage()).
            transform(new CircleTransform())
                    .resize(60, 60)
                    .into(adImage);

        }
        adImage.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v)
            {
                String number=coverList.get(position).getNumber();
                String email=coverList.get(position).getEmail();
                ClipData.Item item = new ClipData.Item((CharSequence)number);
                ClipData.Item mail = new ClipData.Item((CharSequence)email);

                String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
                ClipData dragData = new ClipData("",mimeTypes,item);

                dragData.addItem(mail);

                Log.e("NUMBER",number+ "dragdata"+dragData.getItemAt(1));

                View.DragShadowBuilder shadowBuilder = new  
   View.DragShadowBuilder(adImage);
                adImage.startDrag(dragData, shadowBuilder, adImage, 1);
                adImage.setVisibility(View.INVISIBLE);
                return false;
            }
        });

        adImage.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                ((ListView) parent).performItemClick(v, position, 0); // Let   
 the event be handled in onItemClick()
            }
        });

    }
    return grid;
}

@Override
public Filter getFilter()
{

    return new Filter()
    {
        @Override
        protected FilterResults performFiltering(CharSequence constraint)
        {
            final FilterResults oReturn= new FilterResults();
            final ArrayList<Contacts> result= new ArrayList<Contacts>();
            if(orig== null)
                orig = coverList ;
            if (constraint!=null)
            {
                if (orig!=null && orig.size()>0)
                {
                    for (final Contacts c:orig)
                    {
                        if 
(c.getName().toLowerCase().contains(constraint.toString()))
                            result.add(c);
                    }
                }
                oReturn.values = result;
            }
            return oReturn;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults 
           results)
        {
            coverList = (ArrayList<Contacts>) results.values;

            notifyDataSetChanged();
        }
    };
}


public class CircleTransform implements Transformation {
    @Override
    public Bitmap transform(Bitmap source) {
        int size = Math.min(source.getWidth(), source.getHeight());

        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;

        Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, 
     size);
        if (squaredBitmap != source) {
            source.recycle();
        }

        Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());

        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        BitmapShader shader = new BitmapShader(squaredBitmap,
                BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
        paint.setShader(shader);
        paint.setAntiAlias(true);

        float r = size / 2f;
        canvas.drawCircle(r, r, r, paint);

        squaredBitmap.recycle();
        return bitmap;
    }

    @Override
    public String key() {
        return "circle";
    }
}
mMyContactsAdapter.getItem(position);
Contacts mList = getSearchResults(sv.getQuery().toString()).get(position);
number = mList.get(position).getNumber();
email = mList.get(position).getEmail();
mcontact.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
          number = mMyContactsAdapter.getItem(position).getNumber();
          email = mMyContactsAdapter.getItem(position).getEmail();
          view.setSelected(true);
    }
});