含一個AutoCompleteTextView和一個imagView。textView可以根據輸入提示城市名字。ImageView用于返回主頁面,并傳遞城市代碼給MainActiviy。
一、變量
HashMap用于匹配城市代碼和城市名字
private AutoCompleteTextView searchCityCodeAutoCompleteTextView;
private ImageView searchFinishImageView;
private HashMap<String, String> cityNameKeyCityNameValueHashMap;
private Handler readXMLFinishHandler;
二、Handler
sendMessage()中編寫了adapter適配器方法。***setAutoCompleteTextViewAdapter() *** 用set 獲取所有城市名稱的數組,并把把citySet中的數據放到String數組中。
readXMLFinishHandler = new Handler(){
public void handleMessage(Message msg) {
setAutoCompleteTextViewAdapter();
};
private void setAutoCompleteTextViewAdapter() {
Set<String> cityNameSet = cityNameKeyCityNameValueHashMap.keySet();
String[] cityNames = new String[cityNameSet.size()];
cityNameSet.toArray(cityNames);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
SearchCityCodeActivity.this, android.R.layout.simple_list_item_1,
cityNames);
searchCityCodeAutoCompleteTextView.setAdapter(adapter);//設置適配器
searchCityCodeAutoCompleteTextView.setThreshold(1);//指定從第幾個顯示提示
};
};
三、OnCreate()方法
findViews();
setLisener();
getCityCodeFromXML();
四、setLisener();
-
searchFinishImageView
先異常處理,如果得到的字符串為空,則顯示提示。
String cityName = searchCityCodeAutoCompleteTextView.getText().toString().trim();
if (TextUtils.isEmpty(cityName)) {
searchCityCodeAutoCompleteTextView.setError("請輸入城市名稱");
return;
}//把城市名作為鍵,去hashmap里取值
String cityCodeString = cityNameKeyCityNameValueHashMap.get(cityName);
if (TextUtils.isEmpty(cityCodeString)) {
searchCityCodeAutoCompleteTextView.setError("沒有此城市的信息");
return;
}
int cityCode = Integer.valueOf(cityCodeString);
setResult(cityCode);
finish();
}//cityCode 有值,把cityCode轉化為Int型。返回給mainActivity。