效果
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RelativeLayout;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.seventc.shisannong.xiyi.R;
import com.seventc.shisannong.xiyi.adapter.SeachAddressAdapter;
import com.seventc.shisannong.xiyi.app.MyAppliaction;
import com.seventc.shisannong.xiyi.entity.AddressBean;
import java.util.ArrayList;
public class SearchAddressActivity extends Activity implements PoiSearch.OnPoiSearchListener,View.OnClickListener{
private Context mContext;
private EditText et_search;
private RelativeLayout rl_finish;
private ListView lv_address;
private PoiSearch.Query query;
private int page=0;
private PoiSearch poiSearch;
private SeachAddressAdapter adapter;
private ArrayList<AddressBean> data = new ArrayList<AddressBean>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_address);
MyAppliaction.setInnerLayoutFullScreen(this);
MyAppliaction.addActivity(this);
mContext=this;
initView();
setOnClick();
}
private void initView() {
//String CityName=mapUtils.getCityName();
// Log.i("=====CityName",CityName);
adapter=new SeachAddressAdapter(mContext,data);
et_search= (EditText) findViewById(R.id.et_search);
rl_finish= (RelativeLayout) findViewById(R.id.rl_finish);
lv_address= (ListView) findViewById(R.id.lv_address);
lv_address.setAdapter(adapter);
}
private void seach(String address){
//keyWord表示搜索字符串,
//第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
//cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
query=new PoiSearch.Query(address,"",MyAppliaction.getCityName());
query.setPageSize(300);// 设置每页最多返回多少条poiitem
query.setPageNum(page);//设置查询页码
poiSearch = new PoiSearch(this, query);
poiSearch.searchPOIAsyn();//调用 PoiSearch 的 searchPOIAsyn() 方法发送请求。
poiSearch.setOnPoiSearchListener(this);
//周边检索
// poiSearch.setBound(new SearchBound(new LatLonPoint(locationMarker.getPosition().latitude,
// locationMarker.getPosition().longitude), 1000));//设置周边搜索的中心点以及半径
}
private void setOnClick() {
rl_finish.setOnClickListener(this);
et_search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String str=et_search.getText().toString();
if (str.length()>0){
seach(str);
}
}
});
lv_address.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent=new Intent();//ListView item点击回调
intent.putExtra("data",data.get(i));
setResult(100,intent);
finish();
}
});
}
@Override
public void onPoiSearched(PoiResult poiResult, int i) {
data.clear();
//解析result获取POI信息
if(i == 1000 && poiResult != null) {
ArrayList<PoiItem> items = poiResult.getPois();
for (PoiItem item : items) {
//获取经纬度对象
LatLonPoint llp = item.getLatLonPoint();
double lon = llp.getLongitude();
double lat = llp.getLatitude();
//获取标题
String title = item.getTitle();
//获取内容
String text = item.getSnippet();
String name=item.getAdName();
String cityName=item.getCityName();
String area=item.getBusinessArea();
String provinceName=item.getProvinceName();
String addressInfo=provinceName+cityName+name+text;
data.add(new AddressBean(lon, lat, title, text,addressInfo));
}
adapter.refreshData(data);
}
}
@Override
public void onPoiItemSearched(PoiItem poiItem, int i) {
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.rl_finish:
finish();
break;
}
}
}
//Activity布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
>
<View
android:id="@+id/v"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="@color/zhuti_color2"/>
<RelativeLayout
android:id="@+id/RelativeLayoutbar"
android:layout_width="fill_parent"
android:layout_height="48dp"
android:background="@color/white"
android:layout_below="@+id/v"
>
<RelativeLayout
android:id="@+id/rl_finish"
android:layout_width="60dp"
android:layout_height="match_parent"
android:visibility="visible">
<Button
android:clickable="@null"
android:id="@+id/tv_left_button"
android:layout_width="20dp"
android:layout_height="25dp"
android:layout_marginLeft="10dp"
android:layout_centerVertical="true"
android:background="@mipmap/back"
android:textColor="#0678e9"
android:textSize="15sp" />
</RelativeLayout>
<EditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_centerInParent="true"
android:textColor="@color/black3"
android:textSize="14sp"
android:drawableLeft="@mipmap/sousuo1"
android:paddingLeft="10dp"
android:paddingRight="8dp"
android:drawablePadding="8dp"
android:layout_marginRight="20dp"
android:layout_toRightOf="@+id/rl_finish"
android:background="@drawable/shape_address"
android:hint="小区/写字楼/学校"
/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/line3"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
<ListView
android:id="@+id/lv_address"
android:layout_width="match_parent"
android:scrollbars="none"
android:background="@color/white"
android:layout_below="@+id/RelativeLayoutbar"
android:layout_height="wrap_content"></ListView>
</RelativeLayout>
//SeachAddressAdapter
public class SeachAddressAdapter extends BaseAdapter{
private Context mContext;
private ArrayList<AddressBean> list;
private LayoutInflater inflater;
public SeachAddressAdapter(Context mContext, ArrayList<AddressBean> list) {
this.mContext = mContext;
this.list = list;
this.inflater=LayoutInflater.from(mContext);
}
public void refreshData( ArrayList<AddressBean> list){
this.list = list;
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder holder=null;
if (view==null){
holder=new ViewHolder();
view=inflater.inflate(R.layout.item_seach_address,null);
holder.tv_name= (TextView) view.findViewById(R.id.tv_name);
holder.tv_address= (TextView) view.findViewById(R.id.tv_address);
view.setTag(holder);
}else {
holder= (ViewHolder) view.getTag();
}
AddressBean bean=list.get(i);
holder.tv_name.setText(bean.getTitle());
holder.tv_address.setText(bean.getAddress());
return view;
}
class ViewHolder{
TextView tv_name,tv_address;
}
}
//adapter item布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black3"
android:textSize="16sp"
android:text=""/>
<TextView
android:id="@+id/tv_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:layout_marginTop="5dp"
android:text=""/>
</LinearLayout>
//AddressBean
public class AddressBean implements Serializable{
private double longitude;//经度
private double latitude;//纬度
private String title;//信息标题
private String text;//信息内容
private String address;
public AddressBean(double longitude, double latitude, String title, String text, String address) {
this.longitude = longitude;
this.latitude = latitude;
this.title = title;
this.text = text;
this.address = address;
}
public double getLongitude() {
return longitude;
}
public double getLatitude() {
return latitude;
}
public String getTitle() {
return title;
}
public String getText() {
return text;
}
public String getAddress() {
return address;
}
}