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