Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.zaaach.citypicker.adapter.CityListAdapter;
Expand Down Expand Up @@ -56,6 +57,7 @@ public class CityPickerDialogFragment extends DialogFragment implements TextWatc
private EditText mSearchBox;
private TextView mCancelBtn;
private ImageView mClearAllBtn;
private RelativeLayout mShowSelectView;

private LinearLayoutManager mLayoutManager;
private CityListAdapter mAdapter;
Expand All @@ -76,10 +78,11 @@ public class CityPickerDialogFragment extends DialogFragment implements TextWatc

/**
* 获取实例
*
* @param enable 是否启用动画效果
* @return
*/
public static CityPickerDialogFragment newInstance(boolean enable){
public static CityPickerDialogFragment newInstance(boolean enable) {
final CityPickerDialogFragment fragment = new CityPickerDialogFragment();
Bundle args = new Bundle();
args.putBoolean("cp_enable_anim", enable);
Expand All @@ -93,18 +96,18 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
setStyle(STYLE_NORMAL, R.style.CityPickerStyle);
}

public void setLocatedCity(LocatedCity location){
public void setLocatedCity(LocatedCity location) {
mLocatedCity = location;
}

public void setHotCities(List<HotCity> data){
if (data != null && !data.isEmpty()){
public void setHotCities(List<HotCity> data) {
if (data != null && !data.isEmpty()) {
this.mHotCities = data;
}
}

@SuppressLint("ResourceType")
public void setAnimationStyle(@StyleRes int resId){
public void setAnimationStyle(@StyleRes int resId) {
this.mAnimStyle = resId <= 0 ? mAnimStyle : resId;
}

Expand All @@ -124,6 +127,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat

private void initViews() {
mRecyclerView = mContentView.findViewById(R.id.cp_city_recyclerview);
mShowSelectView = mContentView.findViewById(R.id.show_select_view);
mLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setHasFixedSize(true);
Expand All @@ -138,7 +142,7 @@ private void initViews() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
//确保定位城市能正常刷新
if (newState == RecyclerView.SCROLL_STATE_IDLE){
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
mAdapter.refreshLocationItem();
}
}
Expand Down Expand Up @@ -184,14 +188,14 @@ private void initData() {
mHotCities.add(new HotCity("武汉", "湖北", "101200101"));
}
//初始化定位城市,默认为空时会自动回调定位
if (mLocatedCity == null){
if (mLocatedCity == null) {
mLocatedCity = new LocatedCity(getString(R.string.cp_locating), "未知", "0");
locateState = LocateState.LOCATING;
}else{
} else {
locateState = LocateState.SUCCESS;
}

dbManager = new DBManager(getActivity());
dbManager = new DBManager(getContext());
mAllCities = dbManager.getAllCities();
mAllCities.add(0, mLocatedCity);
mAllCities.add(1, new HotCity("热门城市", "未知", "0"));
Expand All @@ -205,8 +209,8 @@ public void onStart() {
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
if (mOnPickListener != null){
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mOnPickListener != null) {
mOnPickListener.onCancel();
}
}
Expand All @@ -228,43 +232,50 @@ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {

//测量宽高
private void measure() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getRealMetrics(dm);
height = dm.heightPixels;
width = dm.widthPixels;
}else{
} else {
DisplayMetrics dm = getResources().getDisplayMetrics();
height = dm.heightPixels;
width = dm.widthPixels;
}
}

/** 搜索框监听 */
/**
* 搜索框监听
*/
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

@Override
public void afterTextChanged(Editable s) {
String keyword = s.toString();
if (TextUtils.isEmpty(keyword)){
if (TextUtils.isEmpty(keyword)) {
mClearAllBtn.setVisibility(View.GONE);
mEmptyView.setVisibility(View.GONE);
mShowSelectView.setVisibility(View.VISIBLE);
mResults = mAllCities;
((SectionItemDecoration)(mRecyclerView.getItemDecorationAt(0))).setData(mResults);
((SectionItemDecoration) (mRecyclerView.getItemDecorationAt(0))).setData(mResults);
mAdapter.updateData(mResults);
}else {
} else {
mClearAllBtn.setVisibility(View.VISIBLE);
//开始数据库查找
mResults = dbManager.searchCity(keyword);
((SectionItemDecoration)(mRecyclerView.getItemDecorationAt(0))).setData(mResults);
if (mResults == null || mResults.isEmpty()){
((SectionItemDecoration) (mRecyclerView.getItemDecorationAt(0))).setData(mResults);
if (mResults == null || mResults.isEmpty()) {
mEmptyView.setVisibility(View.VISIBLE);
}else {
mShowSelectView.setVisibility(View.GONE);
} else {
mEmptyView.setVisibility(View.GONE);
mShowSelectView.setVisibility(View.VISIBLE);
mAdapter.updateData(mResults);
}
}
Expand All @@ -276,10 +287,10 @@ public void onClick(View v) {
int id = v.getId();
if (id == R.id.cp_cancel) {
dismiss();
if (mOnPickListener != null){
if (mOnPickListener != null) {
mOnPickListener.onCancel();
}
}else if(id == R.id.cp_clear_all){
} else if (id == R.id.cp_clear_all) {
mSearchBox.setText("");
}
}
Expand All @@ -291,26 +302,26 @@ public void onIndexChanged(String index, int position) {
mAdapter.scrollToSection(index);
}

public void locationChanged(LocatedCity location, int state){
public void locationChanged(LocatedCity location, int state) {
mAdapter.updateLocateState(location, state);
}

@Override
public void dismiss(int position, City data) {
dismiss();
if (mOnPickListener != null){
if (mOnPickListener != null) {
mOnPickListener.onPick(position, data);
}
}

@Override
public void locate(){
if (mOnPickListener != null){
public void locate() {
if (mOnPickListener != null) {
mOnPickListener.onLocate();
}
}

public void setOnPickListener(OnPickListener listener){
public void setOnPickListener(OnPickListener listener) {
this.mOnPickListener = listener;
}
}
62 changes: 35 additions & 27 deletions citypicker/src/main/res/layout/cp_dialog_city_picker.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,43 @@

<include layout="@layout/cp_search_view" />

<RelativeLayout
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
android:id="@+id/cp_city_recyclerview"
<RelativeLayout
android:id="@+id/show_select_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"/>

<TextView
android:id="@+id/cp_overlay"
android:layout_width="?attr/cpOverlayWidth"
android:layout_height="?attr/cpOverlayHeight"
android:visibility="gone"
android:gravity="center"
android:layout_centerInParent="true"
android:textSize="?attr/cpOverlayTextSize"
android:textColor="?attr/cpOverlayTextColor"
android:background="?attr/cpOverlayBackground"/>

<!--右侧字母导航-->
<com.zaaach.citypicker.view.SideIndexBar
android:id="@+id/cp_side_index_bar"
android:layout_width="@dimen/cp_index_bar_width"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>

<include layout="@layout/cp_empty_view"/>
</RelativeLayout>
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
android:id="@+id/cp_city_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white" />

<TextView
android:id="@+id/cp_overlay"
android:layout_width="?attr/cpOverlayWidth"
android:layout_height="?attr/cpOverlayHeight"
android:layout_centerInParent="true"
android:background="?attr/cpOverlayBackground"
android:gravity="center"
android:textColor="?attr/cpOverlayTextColor"
android:textSize="?attr/cpOverlayTextSize"
android:visibility="gone" />

<!--右侧字母导航-->
<com.zaaach.citypicker.view.SideIndexBar
android:id="@+id/cp_side_index_bar"
android:layout_width="@dimen/cp_index_bar_width"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true" />

</RelativeLayout>

<include layout="@layout/cp_empty_view" />

</FrameLayout>
</LinearLayout>