根据类别搜索

This commit is contained in:
zhangyuanzhen
2020-01-09 15:11:04 +08:00
parent 989976ceb7
commit 8bb0865b62
29 changed files with 568 additions and 235 deletions

View File

@@ -14,6 +14,13 @@ public class AMapConstants {
*/
public static final float AMAP_ZOOM_COMMON_LEVEL = 15.0f;
/**
* 设置家和公司的Key
*/
public static final String KEY_SET_HOME_COMPONY = "key_home";
/**
* 点击当前位置按钮的地图缩放级别
*/

View File

@@ -0,0 +1,64 @@
package com.mogo.module.navi.ui.adapter;
import android.content.Context;
import android.view.View;
import com.mogo.map.search.inputtips.MogoTip;
import com.mogo.module.navi.R;
import com.mogo.module.navi.ui.adapter.base.RecycleBaseAdapter;
import com.mogo.module.navi.ui.adapter.base.RecycleViewHolder;
import java.util.List;
/**
* @author zyz
* 2019-08-13.
*/
public class SearchCategoryAdapter extends RecycleBaseAdapter<MogoTip> {
private int current = 0;
private int lastPosition = 0;
/**
*
*/
public SearchCategoryAdapter(Context context, List<MogoTip> list) {
super(context, list, R.layout.item_search_category);
}
private boolean mShowDelete = false;
private View.OnClickListener onClickListener;
@Override
public void onBindViewHolder(RecycleViewHolder holder, MogoTip tip) {
holder.setText(R.id.tv_position, tip.getName());
holder.setText(R.id.tv_position_des, tip.getAddress());
holder.setText(R.id.iv_position,String.valueOf(holder.getLayoutPosition()+1));
holder.itemView.setTag(R.id.tag_position, holder.getLayoutPosition());
holder.itemView.setOnClickListener(onClickListener);
holder.itemView.setSelected(current == holder.getLayoutPosition());
}
public void setOnClickListener(View.OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public void setShowDelete(boolean showDelete) {
this.mShowDelete = showDelete;
}
public void refresh(List<MogoTip> datums, boolean showDelete) {
//this.da = datums;
setShowDelete(showDelete);
setDatas(datums);
//notifyDataSetChanged();
}
public void setCurrent(int current) {
this.current = current;
notifyItemChanged(lastPosition);
notifyItemChanged(current);
lastPosition = current;
}
}

View File

@@ -92,6 +92,12 @@ public abstract class RecycleBaseAdapter<T> extends
}
notifyDataSetChanged();
}
public void clear(){
if (list != null) {
list.clear();
notifyDataSetChanged();
}
}
public void messageShow(String mes)
{
if (toast==null){

View File

@@ -0,0 +1,91 @@
package com.mogo.module.navi.ui.search
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.mogo.map.search.inputtips.MogoTip
import com.mogo.module.navi.R
import com.mogo.module.navi.bean.SearchPoi
import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.ui.adapter.SearchCategoryAdapter
import kotlinx.android.synthetic.main.fragment_search_category.cv_search_result
import kotlinx.android.synthetic.main.fragment_search_category.tv_navi_navi
import kotlinx.android.synthetic.main.fragment_setting_address.rv_search_result
import kotlinx.android.synthetic.main.include_search_bar.et_navi_search
import kotlinx.android.synthetic.main.include_search_bar.iv_navi_back
/**
* @author zyz
* 2020-01-09.
*/
class CategorySearchFragment : BaseSearchFragment() {
private lateinit var mAdapter: SearchCategoryAdapter
private var category:String?=null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
category=arguments?.getString("category")
}
override fun getLayoutId(): Int {
return R.layout.fragment_search_category
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
super.onViewCreated(view, savedInstanceState)
mAdapter = SearchCategoryAdapter(activity, ArrayList())
rv_search_result.layoutManager =
LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
rv_search_result.adapter = mAdapter
et_navi_search.setText(category)
iv_navi_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
}
tv_navi_navi.setOnClickListener {
}
mAdapter.setOnClickListener {
var position = it.getTag(R.id.tag_position) as Int
mAdapter.setCurrent(position)
}
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
mSearchPresenter.startSearchPoiByInput(category)
}
override fun renderSearchPoiResult(
datums: List<MogoTip>,
showDelete: Boolean
) {
mAdapter.setDatas(datums)
cv_search_result.visibility=View.VISIBLE
}
override fun showHistory(datums: List<SearchPoi>) {
}
companion object{
fun newInstance( category:String):Fragment{
var bundle = Bundle()
bundle.putString("category",category)
var categorySerachFragment = CategorySearchFragment()
categorySerachFragment.arguments=bundle
return categorySerachFragment
}
}
}

View File

@@ -1,38 +1,27 @@
package com.mogo.module.navi.ui.search;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.mogo.map.search.inputtips.MogoTip;
import com.mogo.module.common.MogoModulePaths;
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.constants.SearchServiceHolder;
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.module.navi.ui.setting.NaviSettingFragment;
import com.mogo.service.MogoServicePaths;
import com.mogo.module.navi.ui.setting.SettingAddressFragment;
import com.mogo.service.fragmentmanager.FragmentDescriptor;
import com.mogo.service.fragmentmanager.IMogoFragmentManager;
import com.mogo.utils.WindowUtils;
import io.reactivex.disposables.Disposable;
import java.util.ArrayList;
import java.util.List;
@@ -47,13 +36,12 @@ import java.util.List;
* {@link SearchConstants#SEARCH_TYPE_MULTI_HOME}
*/
@Route(path = MogoModulePaths.PATH_FRAGMENT_SEARCH)
public class SearchFragment extends BaseSearchFragment implements SearchView {
public class SearchFragment extends BaseSearchFragment implements SearchView, View.OnClickListener {
public static final String TAG = "search";
public int mSearchType;
private View mClose;
private RecyclerView mSearchResult;
@@ -61,7 +49,6 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
private SearchPoiAdapter mPoiAdapter;
private HistoryPoiAdapter mHistoryAdapter;
/**
* 设置常用地址(我的位置、选点)时的设置按钮
*/
@@ -73,7 +60,6 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
private boolean mActionSuccess = false;
private View rlHistory;
private TextView tvEmpty;
IMogoFragmentManager fragmentManager;
@Override
public void onAttach(Context context) {
@@ -84,7 +70,6 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
@Override public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragmentManager = (IMogoFragmentManager) ARouter.getInstance().build(MogoServicePaths.PATH_FRAGMENT_MANAGER).navigation();
}
@@ -111,17 +96,17 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
mSearchResult.setLayoutManager(linearLayoutManager);
mPoiAdapter= new SearchPoiAdapter(getActivity(),new ArrayList<>());
mPoiAdapter = new SearchPoiAdapter(getActivity(), new ArrayList<>());
mSearchResult.setAdapter(mPoiAdapter);
mHistoryAdapter= new HistoryPoiAdapter(getActivity(),new ArrayList<>());
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) {
fragmentManager.pop();
SearchServiceHolder.INSTANCE.getFragmentManager().pop();
}
});
@@ -139,7 +124,6 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
}
});
findViewById(R.id.tv_navi_history_clear).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
mSearchPresenter.deleteAllCachedPoi();
@@ -148,14 +132,44 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
findViewById(R.id.tv_navi_setting).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
FragmentDescriptor.Builder builder = new FragmentDescriptor.Builder();
builder.fragment(new NaviSettingFragment());
FragmentDescriptor build =
builder.tag(MogoModulePaths.PATH_FRAGMENT_SETTING).build();
fragmentManager.push(build);
push(new NaviSettingFragment(),MogoModulePaths.PATH_FRAGMENT_SETTING);
}
});
findViewById(R.id.tv_navi_company).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
pupSettingAddress(1);
}
});
findViewById(R.id.tv_navi_home).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
pupSettingAddress(0);
}
});
findViewById(R.id.tv_navi_wash).setOnClickListener(this);
findViewById(R.id.tv_navi_toilet).setOnClickListener(this);
findViewById(R.id.tv_navi_gas).setOnClickListener(this);
findViewById(R.id.tv_navi_restaurant).setOnClickListener(this);
findViewById(R.id.tv_navi_park).setOnClickListener(this);
}
private void push(Fragment fragment,String tag) {
FragmentDescriptor.Builder builder = new FragmentDescriptor.Builder();
builder.fragment(fragment);
FragmentDescriptor build =
builder.tag(tag).build();
SearchServiceHolder.INSTANCE.getFragmentManager().push(build);
}
private void pupSettingAddress(int type) {
FragmentDescriptor.Builder builder = new FragmentDescriptor.Builder();
builder.fragment(SettingAddressFragment.Companion.newInstance(type));
FragmentDescriptor build =
builder.tag(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME).build();
SearchServiceHolder.INSTANCE.getFragmentManager().push(build);
}
/**
@@ -236,10 +250,9 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
//}
}
@Override
public void renderSearchPoiResult(List<MogoTip> datums, boolean showDelete) {
if (datums==null||datums.isEmpty()) {
if (datums == null || datums.isEmpty()) {
showEmpty(getString(R.string.search_empty));
return;
}
@@ -249,7 +262,7 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
@Override public void showHistory(List<SearchPoi> datums) {
if (datums==null||datums.isEmpty()) {
if (datums == null || datums.isEmpty()) {
showEmpty(getString(R.string.history_empty));
return;
}
@@ -327,10 +340,8 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
// }
//}
private void navi2Location(SearchPoi searchPoi) {
}
/**
@@ -350,7 +361,6 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
}
}
private void showResult() {
rlHistory.setVisibility(View.GONE);
mSearchResult.setVisibility(View.VISIBLE);
@@ -363,10 +373,20 @@ public class SearchFragment extends BaseSearchFragment implements SearchView {
tvEmpty.setVisibility(View.GONE);
}
private void showEmpty(String str){
private void showEmpty(String str) {
rlHistory.setVisibility(View.GONE);
tvEmpty.setText(str);
mSearchResult.setVisibility(View.GONE);
tvEmpty.setVisibility(View.VISIBLE);
}
/**
* 类别
*/
@Override public void onClick(View v) {
TextView category = (TextView) v;
String text = category.getText().toString();
push(CategorySearchFragment.Companion.newInstance(text),MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY);
}
}

View File

@@ -91,7 +91,7 @@ public class SearchPresenter extends Presenter< SearchView >
}
};
private void startSearchPoiByInput( String keyword ) {
public void startSearchPoiByInput( String keyword ) {
MogoInputtipsQuery mogoInputtipsQuery = new MogoInputtipsQuery();
mogoInputtipsQuery.setKeyword(keyword);
IMogoInputtipsSearch inputtipsSearch =

View File

@@ -2,32 +2,127 @@ package com.mogo.module.navi.ui.setting
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.android.arouter.facade.annotation.Route
import com.mogo.map.search.inputtips.MogoTip
import com.mogo.module.common.MogoModulePaths
import com.mogo.module.navi.R
import com.mogo.module.navi.bean.SearchPoi
import com.mogo.module.navi.constants.AMapConstants
import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.ui.adapter.SearchPoiAdapter
import com.mogo.module.navi.ui.base.BaseFragment
import com.mogo.module.navi.ui.search.BaseSearchFragment
import kotlinx.android.synthetic.main.fragment_navi_setting.iv_back
import kotlinx.android.synthetic.main.fragment_navi_setting.tv_navi_sound_type
import kotlinx.android.synthetic.main.include_search_bar.iv_navi_back
import kotlinx.android.synthetic.main.fragment_setting_address.group_set_address
import kotlinx.android.synthetic.main.fragment_setting_address.rv_search_result
import kotlinx.android.synthetic.main.fragment_setting_address.tv_navi_choose_point
import kotlinx.android.synthetic.main.fragment_setting_address.tv_navi_my_location
import kotlinx.android.synthetic.main.fragment_setting_address.tv_set_as_home
import kotlinx.android.synthetic.main.include_search_bar.et_navi_search
/**
* @author zyz
* 2020-01-07.
*/
@Route(path= MogoModulePaths.PATH_FRAGMENT_SETTING)
class SettingAddressFragment : BaseFragment() {
@Route(path = MogoModulePaths.PATH_FRAGMENT_SETTING_HOME)
class SettingAddressFragment : BaseSearchFragment() {
override fun renderSearchPoiResult(
datums: MutableList<MogoTip>?,
showDelete: Boolean
) {
mAdapter.setDatas(datums)
group_set_address.visibility = View.GONE
rv_search_result.visibility = View.VISIBLE
}
override fun showHistory(datums: MutableList<SearchPoi>?) {
}
private var style: Int = 0
private lateinit var mAdapter: SearchPoiAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) ?: 0
}
override fun getLayoutId(): Int {
return R.layout.fragment_setting_address
}
fun isHome(): Boolean {
return style == 0
}
fun isCompony(): Boolean {
return style == 1
}
fun isSearch(): Boolean {
return group_set_address.visibility == View.GONE
}
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
super.onViewCreated(view, savedInstanceState)
iv_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
if (isHome()) {
tv_set_as_home.text = resources.getString(R.string.set_as_home_navi)
} else {
tv_set_as_home.text = resources.getString(R.string.set_as_compony_navi)
}
mAdapter = SearchPoiAdapter(activity, ArrayList())
rv_search_result.layoutManager =
LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
rv_search_result.adapter = mAdapter
iv_navi_back.setOnClickListener {
if (group_set_address.visibility == View.VISIBLE) {
SearchServiceHolder.fragmentManager.pop()
} else {
reset()
}
}
tv_navi_choose_point.setOnClickListener {
group_set_address.visibility = View.GONE
tv_set_as_home.visibility = View.VISIBLE
}
tv_navi_my_location.setOnClickListener {
group_set_address.visibility = View.GONE
tv_set_as_home.visibility = View.VISIBLE
}
}
private fun reset() {
group_set_address.visibility = View.VISIBLE
rv_search_result.visibility = View.GONE
mAdapter.clear()
et_navi_search.setText("")
tv_set_as_home.visibility = View.GONE
}
companion object {
fun newInstance(type: Int = 0): Fragment {
var settingAddressFragment = SettingAddressFragment()
val bundle = Bundle()
bundle.putInt(AMapConstants.KEY_SET_HOME_COMPONY, type)
settingAddressFragment.setArguments(bundle)
return settingAddressFragment
}
}
}