package com.spring.selectcity.activities;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.spring.selectcity.R;
import com.spring.selectcity.binding.Bind;
import com.spring.selectcity.binding.ViewBinder;
import com.spring.selectcity.model.CityEntity;
import com.spring.selectcity.utils.JsonReadUtil;
import com.spring.selectcity.utils.ScreenUtils;
import com.spring.selectcity.utils.ToastUtils;
import com.spring.selectcity.view.LetterListView;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MainActivity extends AppCompatActivity implements AbsListView.OnScrollListener {
//文件名称
private final static String CityFileName = "allcity.json";
@Bind(R.id.tool_bar_fl)
private FrameLayout mToolbar;
@Bind(R.id.search_locate_content_et)
private EditText searchContentEt;
@Bind(R.id.total_city_lv)
private ListView totalCityLv;
@Bind(R.id.total_city_letters_lv)
private LetterListView lettersLv;
@Bind(R.id.search_city_lv)
private ListView searchCityLv;
@Bind(R.id.no_search_result_tv)
private TextView noSearchDataTv;
private Handler handler;
private TextView overlay; // 对话框首字母TextView
private OverlayThread overlayThread; // 显示首字母对话框
private boolean mReady = false;
private boolean isScroll = false;
private HashMap<String, Integer> alphaIndexer;// 存放存在的汉语拼音首字母和与之对应的列表位置
protected List<CityEntity> hotCityList = new ArrayList<>();
protected List<CityEntity> totalCityList = new ArrayList<>();
protected List<CityEntity> curCityList = new ArrayList<>();
protected List<CityEntity> searchCityList = new ArrayList<>();
protected CityListAdapter cityListAdapter;
protected SearchCityListAdapter searchCityListAdapter;
private String locationCity, curSelCity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 默认软键盘不弹出
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
setSystemBarTransparent();
setContentView(R.layout.activity_main);
initView();
initData();
initListener();
}
private void initView() {
ViewBinder.bind(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
int top = ScreenUtils.getSystemBarHeight();
mToolbar.setPadding(0, top, 0, 0);
}
handler = new Handler();
overlayThread = new OverlayThread();
searchCityListAdapter = new SearchCityListAdapter(this, searchCityList);
searchCityLv.setAdapter(searchCityListAdapter);
locationCity = "杭州";
curSelCity = locationCity;
}
private void initData() {
initTotalCityList();
cityListAdapter = new CityListAdapter(this, totalCityList, hotCityList);
totalCityLv.setAdapter(cityListAdapter);
totalCityLv.setOnScrollListener(this);
totalCityLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position > 1) {
CityEntity cityEntity = totalCityList.get(position);
showSetCityDialog(cityEntity.getName(), cityEntity.getCityCode());
}
}
});
lettersLv.setOnTouchingLetterChangedListener(new LetterListViewListener());
initOverlay();
}
private void initListener() {
searchCityLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CityEntity cityEntity = searchCityList.get(position);
showSetCityDialog(cityEntity.getName(), cityEntity.getCityCode());
}
});
searchContentEt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String content = searchContentEt.getText().toString().trim().toLowerCase();
setSearchCityList(content);
}
});
searchContentEt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
hideSoftInput(searchContentEt.getWindowToken());
String content = searchContentEt.getText().toString().trim().toLowerCase();
setSearchCityList(content);
return true;
}
return false;
}
});
}
/**
* 设置搜索数据展示
*/
private void setSearchCityList(String content) {
searchCityList.clear();
if (TextUtils.isEmpty(content)) {
totalCityLv.setVisibility(View.VISIBLE);
lettersLv.setVisibility(View.VISIBLE);
searchCityLv.setVisibility(View.GONE);
noSearchDataTv.setVisibility(View.GONE);
} else {
totalCityLv.setVisibility(View.GONE);
lettersLv.setVisibility(View.GONE);
for (int i = 0; i < curCityList.size(); i++) {
CityEntity cityEntity = curCityList.get(i);
if (cityEntity.getName().contains(content) || cityEntity.getPinyin().contains(content)
|| cityEntity.getFirst().contains(content)) {
searchCityList.add(cityEntity);
}
}
if (searchCityList.size() != 0) {
noSearchDataTv.setVisibility(View.GONE);
searchCityLv.setVisibility(View.VISIBLE);
} else {
noSearchDataTv.setVisibility(View.VISIBLE);
searchCityLv.setVisibility(View.GONE);
}
searchCityListAdapter.notifyDataSetChanged();
}
}
/**
* 初始化全部城市列表
* |||焦作市https://131090162>>郑州市https://131090162>>南阳市https://131090162>>安阳市https://131090162>>信阳市https://……>>|||
*/
public void initTotalCityList() {
hotCityList.clear();
totalCityList.clear();
curCityList.clear();
String cityListJson = JsonReadUtil.getJsonStr(this, CityFileName);
JSONObject jsonObject;
try {
jsonObject = new JSONObject(cityListJson);
JSONArray array = jsonObject.getJSONArray("City");
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
String name = object.getString("name");
String key = object.getString("key");
String pinyin = object.getString("full");
String first = object.getString("first");
String cityCode = object.getString("code");
CityEntity cityEntity = new CityEntity();
cityEntity.setName(name);
cityEntity.setKey(key);
cityEntity.setPinyin(pinyin);
cityEntity.setFirst(first);
cityEntity.setCityCode(cityCode);
if (key.equals("热门")) {
hotCityList.add(cityEntity);
} else {
if (!cityEntity.getKey().equals("0") && !cityEntity.getKey().equals("1")) {
curCityList.add(cityEntity);
}
totalCityList.add(cityEntity);
}
}
河南城市列表——快速索引选择地区
于 2023-06-08 17:15:03 首次发布