增加历史列表

This commit is contained in:
zhangyuanzhen
2020-01-07 17:41:17 +08:00
parent dca01fe24b
commit eb1053e4ba
9 changed files with 182 additions and 114 deletions

View File

@@ -15,6 +15,7 @@ import com.mogo.map.MogoMapView;
import com.mogo.map.location.IMogoLocationClient;
import com.mogo.map.location.MogoLocation;
import com.mogo.map.uicontroller.IMogoMapUIController;
import com.mogo.module.common.MogoModulePaths;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.map.IMogoMapService;
@@ -55,14 +56,10 @@ public class MapFragment extends MvpFragment< MapView, MapPresenter > implements
mMogoMapView = findViewById( R.id.module_map_id_map );
mMogoMap = mMogoMapView.getMap();
mMogoMap.getUIController().showMyLocation( true );
findViewById(R.id.module_map_id_search).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
ARouter.getInstance().build(MogoModulePaths.PATH_MODULE_NAV_ACTIVITY).navigation(getActivity());
}
});
mSearch = findViewById( R.id.module_map_id_search );
mSearch.setOnClickListener( view -> {
ARouter.getInstance().build(MogoModulePaths.PATH_MODULE_NAV_ACTIVITY).navigation(getActivity());
} );
mHome = findViewById( R.id.module_map_id_home );

View File

@@ -1,5 +1,6 @@
package com.mogo.module.navi.ui
import android.app.Activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.fragment.app.Fragment
@@ -7,9 +8,11 @@ import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.launcher.ARouter
import com.mogo.module.common.MogoModulePaths
import com.mogo.module.navi.R
import com.mogo.module.navi.ui.base.BaseActivity
@Route(path = MogoModulePaths.PATH_MODULE_NAV_ACTIVITY)
class NaviActivity : AppCompatActivity() {
class NaviActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -18,6 +21,5 @@ class NaviActivity : AppCompatActivity() {
.build("/navi/search")
.navigation() as Fragment
supportFragmentManager.beginTransaction().replace(R.id.fl_container,fragment).commitNow()
}
}

View File

@@ -21,9 +21,6 @@ public class SearchPoiAdapter extends RecycleBaseAdapter<MogoTip> {
public SearchPoiAdapter(Context context, List<MogoTip> list) {
super(context, list, R.layout.item_search_poi);
}
private OnItemClickedListener< MogoTip > mOnItemClickedListener;
private OnItemClickedListener< MogoTip > mOnDeleteAllClickedListener;
private OnItemClickedListener< MogoTip > mOnActionButtonClickedListener;
private boolean mShowDelete = false;
private View.OnClickListener onClickListener;
@@ -42,17 +39,7 @@ public class SearchPoiAdapter extends RecycleBaseAdapter<MogoTip> {
public void setOnClickListener(View.OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public void setOnItemClickedListener( OnItemClickedListener< MogoTip > onItemClickedListener ) {
this.mOnItemClickedListener = onItemClickedListener;
}
public void setOnDeleteAllClickedListener( OnItemClickedListener< MogoTip > onDeleteAllClickedListener ) {
this.mOnDeleteAllClickedListener = onDeleteAllClickedListener;
}
public void setOnActionButtonClickedListener( OnItemClickedListener< MogoTip > onActionButtonClickedListener ) {
this.mOnActionButtonClickedListener = onActionButtonClickedListener;
}
public void setShowDelete( boolean showDelete ) {
this.mShowDelete = showDelete;
}
@@ -62,9 +49,5 @@ public class SearchPoiAdapter extends RecycleBaseAdapter<MogoTip> {
setDatas(datums);
//notifyDataSetChanged();
}
public void clear(){
mOnItemClickedListener = null;
mOnDeleteAllClickedListener = null;
mOnActionButtonClickedListener = null;
}
}

View File

@@ -20,11 +20,14 @@ import com.mogo.map.search.inputtips.MogoTip;
import com.mogo.module.navi.R;
import com.mogo.module.navi.bean.EntityConvertUtils;
import com.mogo.module.navi.bean.SearchPoi;
import com.mogo.module.navi.database.AppDataBase;
import com.mogo.module.navi.ui.adapter.HistoryPoiAdapter;
import com.mogo.module.navi.ui.adapter.SearchPoiAdapter;
import com.mogo.module.navi.ui.base.BaseFragment;
import com.mogo.module.navi.ui.base.UiController;
import com.mogo.utils.WindowUtils;
import io.reactivex.disposables.Disposable;
import java.util.ArrayList;
import java.util.List;
/**
@@ -50,23 +53,22 @@ public class SearchFragment extends BaseFragment implements SearchView {
private EditText mSearchBox;
private RecyclerView mSearchResult;
private RecyclerView rvHistory;
private SearchPoiAdapter mPoiAdapter;
private HistoryPoiAdapter mHistoryAdapter;
private View mMyLocation;
private View mChoicePoint;
private View mCurrentLocation;
/**
* 设置常用地址(我的位置、选点)时的设置按钮
*/
private TextView mActionButton;
/**
* 地址设置是否完成
*/
private boolean mActionSuccess = false;
private View rlHistory;
private TextView tvEmpty;
@Override
public void onAttach(Context context) {
@@ -88,8 +90,54 @@ public class SearchFragment extends BaseFragment implements SearchView {
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mSearchBox=view.findViewById(R.id.et_navi_search);
mSearchResult=view.findViewById(R.id.rv_navi_search);
mSearchBox = view.findViewById(R.id.et_navi_search);
mSearchResult = view.findViewById(R.id.rv_navi_search);
rvHistory = view.findViewById(R.id.rv_navi_history);
rlHistory = view.findViewById(R.id.rl_navi_history);
LinearLayoutManager linearManager =
new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
rvHistory.setLayoutManager(linearManager);
LinearLayoutManager linearLayoutManager =
new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
mSearchResult.setLayoutManager(linearLayoutManager);
mPoiAdapter= new SearchPoiAdapter(getActivity(),new ArrayList<>());
mSearchResult.setAdapter(mPoiAdapter);
mHistoryAdapter= new HistoryPoiAdapter(getActivity(),new ArrayList<>());
rvHistory.setAdapter(mHistoryAdapter);
tvEmpty = findViewById(R.id.tv_navi_list_empty);
findViewById(R.id.iv_navi_back).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
getActivity().finish();
}
});
mHistoryAdapter.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
}
});
mPoiAdapter.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
MogoTip tag = (MogoTip) v.getTag(R.id.tag_position);
SearchPoi searchPoi = EntityConvertUtils.tipToPoi(tag);
mSearchPresenter.insert(searchPoi);
}
});
findViewById(R.id.tv_navi_history_clear).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
mSearchPresenter.deleteAllCachedPoi();
}
});
}
/**
@@ -179,42 +227,22 @@ public class SearchFragment extends BaseFragment implements SearchView {
@Override
public void renderSearchPoiResult(List<MogoTip> datums, boolean showDelete) {
if (datums == null || datums.isEmpty()) {
mSearchResult.setVisibility(View.GONE);
} else {
mSearchResult.setVisibility(View.VISIBLE);
}
if (mPoiAdapter == null) {
mPoiAdapter = new SearchPoiAdapter(getContext(), datums);
mPoiAdapter.setOnItemClickedListener(item -> {
if (mSearchType == SearchConstants.SEARCH_TYPE_COMMON) {
final Disposable disposable =
mSearchPresenter.cacheSelectPoiItem(item).subscribe(output -> {
navi2Location(EntityConvertUtils.tipToPoi(item));
});
mSearchPresenter.addDisposable(disposable);
} else {
// do nothing.
}
});
mPoiAdapter.setOnDeleteAllClickedListener(NULL -> {
mSearchPresenter.deleteAllCachedPoi();
});
mPoiAdapter.setShowDelete(showDelete);
mSearchResult.setAdapter(mPoiAdapter);
} else {
if (datums != null && !datums.isEmpty()) {
mSearchResult.scrollToPosition(0);
}
mPoiAdapter.refresh(datums, showDelete);
if (datums==null||datums.isEmpty()) {
showEmpty(getString(R.string.search_empty));
return;
}
showResult();
mPoiAdapter.setDatas(datums);
}
@Override public void showHistory(List<SearchPoi> datums) {
if (datums==null||datums.isEmpty()) {
showEmpty(getString(R.string.history_empty));
return;
}
showHistory();
mHistoryAdapter.setDatas(datums);
}
@Override
@@ -287,17 +315,10 @@ public class SearchFragment extends BaseFragment implements SearchView {
// }
//}
/**
* @param searchPoi 导航目的地
*/
private void navi2Location(SearchPoi searchPoi) {
if (searchPoi == null || searchPoi == SearchPoi.NULL) {
Toast.makeText(mContext, "未设置", Toast.LENGTH_SHORT).show();
return;
}
//SearchPoiLiveData.getInstance().postValue( searchPoi );
exitSearch();
}
/**
@@ -327,11 +348,26 @@ public class SearchFragment extends BaseFragment implements SearchView {
}
mSearchBox.setTag(null);
if (mPoiAdapter != null) {
mPoiAdapter.clear();
}
mPoiAdapter = null;
//removeChoicePointMarker();
}
private void showResult() {
rlHistory.setVisibility(View.GONE);
mSearchResult.setVisibility(View.VISIBLE);
tvEmpty.setVisibility(View.GONE);
}
private void showHistory() {
rlHistory.setVisibility(View.VISIBLE);
mSearchResult.setVisibility(View.GONE);
tvEmpty.setVisibility(View.GONE);
}
private void showEmpty(String str){
rlHistory.setVisibility(View.GONE);
tvEmpty.setText(str);
mSearchResult.setVisibility(View.GONE);
tvEmpty.setVisibility(View.VISIBLE);
}
}

View File

@@ -19,6 +19,11 @@ import com.mogo.module.navi.constants.DataConstants;
import com.mogo.module.navi.database.AppDataBase;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.map.IMogoMapService;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.Scheduler;
import io.reactivex.Single;
import io.reactivex.SingleEmitter;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -97,6 +102,8 @@ public class SearchPresenter extends Presenter< SearchView >
mView.renderSearchPoiResult(result,false);
}
});
inputtipsSearch.requestInputtipsAsyn();
}
@@ -145,7 +152,7 @@ public class SearchPresenter extends Presenter< SearchView >
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() )
.subscribe( count -> {
mView.renderSearchPoiResult( null, false );
mView.showHistory( null );
} );
mCompositeDisposable.add( disposable );
}
@@ -217,6 +224,27 @@ public class SearchPresenter extends Presenter< SearchView >
}
public void navi2Positon(){
//mMapService.getNavi(getContext()).naviTo();
}
public void insert(SearchPoi searchPoi){
Observable.create(new ObservableOnSubscribe<String>() {
@Override public void subscribe(ObservableEmitter<String> emitter) throws Exception {
AppDataBase.getDatabase(getContext()).poiDao().insert(searchPoi);
}
}).subscribeOn(Schedulers.io()).subscribe();
}
public void clearHistory(List<SearchPoi> list){
Observable.create(new ObservableOnSubscribe<String>() {
@Override public void subscribe(ObservableEmitter<String> emitter) throws Exception {
AppDataBase.getDatabase(getContext()).poiDao().deleteAll(list);
}
}).subscribeOn(Schedulers.io()).subscribe();
}
@Override
public void onDestroy( @NonNull LifecycleOwner owner ) {

View File

@@ -22,10 +22,18 @@
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<ImageView
android:layout_width="@dimen/dp_80"
android:id="@+id/iv_navi_back"
android:layout_height="@dimen/dp_80"
android:layout_marginLeft="@dimen/dp_24"
android:layout_marginRight="@dimen/dp_20"
android:src="@mipmap/icon_back"
/>
<EditText
android:layout_width="0dp"
android:id="@+id/et_navi_search"
android:background="@null"
android:layout_height="wrap_content"
android:layout_weight="1"
android:imeOptions="actionDone"
@@ -34,13 +42,7 @@
android:textColorHint="@color/white_60"
/>
<ImageView
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80"
android:layout_marginLeft="@dimen/dp_24"
android:layout_marginRight="@dimen/dp_20"
android:src="@mipmap/icon_back"
/>
</LinearLayout>
@@ -116,7 +118,7 @@
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="@string/history_search"
android:text="@string/history_clear"
android:textColor="@color/txt_blue"
android:textSize="@dimen/txt_normal"
/>
@@ -125,28 +127,42 @@
android:layout_width="match_parent"
android:id="@+id/rv_navi_history"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_120"
android:layout_marginTop="@dimen/dp_60"
/>
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="600dp"
android:visibility="gone"
android:layout_marginTop="@dimen/dp_32"
android:layout_width="600dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/tv_navi_wash"
android:background="@drawable/shape_round_gray"
app:layout_constraintTop_toBottomOf="@id/ll_navi_search"
app:layout_constraintLeft_toLeftOf="parent"
android:id="@+id/rv_navi_search"
android:layout_height="match_parent"/>
android:id="@+id/rv_navi_search"/>
<TextView
android:visibility="gone"
android:layout_marginTop="@dimen/dp_32"
android:layout_width="600dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/tv_navi_wash"
android:background="@drawable/shape_round_gray"
app:layout_constraintTop_toBottomOf="@id/ll_navi_search"
app:layout_constraintLeft_toLeftOf="parent"
android:id="@+id/tv_navi_list_empty"/>
<TextView
android:drawableTop="@mipmap/icon_navi_restrant"
app:layout_constraintTop_toTopOf="@id/rl_navi_history"
app:layout_constraintLeft_toRightOf="@id/rl_navi_history"
app:layout_constraintTop_toBottomOf="@id/ll_navi_home"
app:layout_constraintLeft_toLeftOf="@id/ll_navi_home"
android:text="@string/navi_restrant"
android:layout_marginTop="@dimen/dp_32"
android:id="@+id/tv_navi_restaurant"
android:layout_marginLeft="@dimen/dp_32"
style="@style/txt_navi_style"
/>
@@ -155,7 +171,7 @@
android:id="@+id/tv_navi_gas"
app:layout_constraintTop_toTopOf="@id/tv_navi_restaurant"
app:layout_constraintLeft_toRightOf="@id/tv_navi_restaurant"
android:text="@string/navi_restrant"
android:text="@string/navi_gas"
android:layout_marginLeft="@dimen/dp_32"
style="@style/txt_navi_style"
/>
@@ -166,7 +182,7 @@
android:id="@+id/tv_navi_toilet"
app:layout_constraintTop_toBottomOf="@id/tv_navi_restaurant"
app:layout_constraintLeft_toLeftOf="@id/tv_navi_restaurant"
android:text="@string/navi_restrant"
android:text="@string/navi_toilet"
android:layout_marginTop="@dimen/dp_32"
style="@style/txt_navi_style"
/>
@@ -177,7 +193,7 @@
android:id="@+id/tv_navi_wash"
app:layout_constraintTop_toBottomOf="@id/tv_navi_toilet"
app:layout_constraintLeft_toLeftOf="@id/tv_navi_restaurant"
android:text="@string/navi_restrant"
android:text="@string/navi_park"
android:layout_marginTop="@dimen/dp_32"
style="@style/txt_navi_style"
@@ -188,7 +204,7 @@
android:id="@+id/tv_navi_park"
app:layout_constraintTop_toBottomOf="@id/tv_navi_gas"
app:layout_constraintLeft_toLeftOf="@id/tv_navi_gas"
android:text="@string/navi_restrant"
android:text="@string/navi_wash"
android:layout_marginTop="@dimen/dp_32"
style="@style/txt_navi_style"
@@ -199,12 +215,9 @@
android:id="@+id/tv_navi_setting"
app:layout_constraintTop_toBottomOf="@id/tv_navi_park"
app:layout_constraintLeft_toLeftOf="@id/tv_navi_gas"
android:text="@string/navi_restrant"
android:text="@string/navi_setting"
android:layout_marginTop="@dimen/dp_32"
style="@style/txt_navi_style"
/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -3,13 +3,14 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_90"
android:layout_height="@dimen/dp_180"
>
<ImageView
android:id="@+id/iv_position"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_40"
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80"
android:src="@mipmap/icon_navi_position"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -18,12 +19,12 @@
<TextView
android:id="@+id/tv_position"
android:layout_width="0dp"
android:layout_height="@dimen/dp_35"
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_15"
android:layout_height="@dimen/dp_70"
android:layout_marginLeft="@dimen/dp_30"
android:layout_marginTop="@dimen/dp_30"
android:gravity="center_vertical"
android:textColor="@color/white"
android:textSize="@dimen/sp_25"
android:textSize="25sp"
app:layout_constraintLeft_toRightOf="@id/iv_position"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -33,12 +34,12 @@
<TextView
android:id="@+id/tv_position_des"
android:layout_width="0dp"
android:layout_height="@dimen/dp_21"
android:layout_marginTop="@dimen/dp_4"
android:layout_height="@dimen/dp_42"
android:layout_marginTop="@dimen/dp_8"
android:ellipsize="marquee"
android:singleLine="true"
android:textColor="@color/white_60"
android:textSize="@dimen/sp_15"
android:textSize="@dimen/sp_30"
app:layout_constraintLeft_toLeftOf="@id/tv_position"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_position"
@@ -46,8 +47,8 @@
<View
android:layout_width="0dp"
android:layout_height="@dimen/dp_1"
android:layout_marginLeft="@dimen/dp_55"
android:layout_height="@dimen/dp_2"
android:layout_marginLeft="@dimen/dp_110"
android:background="@color/white_10"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -5,4 +5,12 @@
<string name="navi_home">回家</string>
<string name="navi_company">去公司</string>
<string name="navi_restrant">餐馆</string>
<string name="navi_gas">加油站</string>
<string name="navi_toilet">卫生间</string>
<string name="navi_park">停车场</string>
<string name="navi_wash">洗车</string>
<string name="navi_setting">更多设置</string>
<string name="history_clear">清空历史</string>
<string name="history_empty">暂无历史结果</string>
<string name="search_empty">暂无搜索结果</string>
</resources>