diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index d6fdd9e..7bd27ea 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -7,11 +7,11 @@ - + - + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0407368..b19b47f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,7 +26,8 @@ + android:label="Map" + android:windowSoftInputMode="adjustPan"> @@ -63,12 +64,12 @@ android:exported="true" android:label="@string/title_activity_sign_up"> - - + + - - + + - - + + - - + + - + + + + - + listData; + ListView list; + boolean isGenre; + String genreData[]; + String friendsData[]; + @Override protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); + nemophila = (Nemophila) this.getApplication(); + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); - // ナビゲーションホストを取得する - NavHostFragment navHostFragment = - (NavHostFragment)getSupportFragmentManager() - .findFragmentById(R.id.navHostFragment); + // DrawerToggle + DrawerLayout drawer = + (DrawerLayout) findViewById(R.id.drawer_layout); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, drawer, toolbar, + R.string.drawer_open, + R.string.drawer_close); + drawer.addDrawerListener(toggle); + toggle.syncState(); - // navHostFragmentのナビゲーションコントローラを取得する - NavController navController = navHostFragment.getNavController(); + // NavigationView Listener + NavigationView navigationView = (NavigationView) findViewById(R.id.navView); + navigationView.setNavigationItemSelectedListener(this); - // アップバーのコンフィグレーションをビルドする - AppBarConfiguration appBarConfiguration = - new AppBarConfiguration.Builder(navController.getGraph()) - .setOpenableLayout((DrawerLayout)findViewById(R.id.drawer_layout)) - .build(); + // geocode Test + handler = new Handler(); - // ナビゲーションUIをセットアップする - NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration); +// // 検索バーの処理 +// SearchView searchView = findViewById(R.id.tool_search); +// searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { +// @Override +// public boolean onQueryTextSubmit(String query) { +// new Thread(() -> { +// geoCode(query); +// }).start(); +// return false; +// } +// +// @Override +// public boolean onQueryTextChange(String newText) { +// return false; +// } +// }); + + //filterDialog = new FilterDialog(); + + // サイドメニューのボタン + Button genreButton = findViewById(R.id.filter_genre_button); + Button friendButton = findViewById(R.id.filter_friends_button); + + // 押したボタンを灰色にし、listを作成 + genreButton.setOnClickListener(view -> { + genreButton.setBackgroundColor(Color.parseColor("#afafb0")); + friendButton.setBackgroundColor(Color.WHITE); + prepareGenreList(null); + }); + friendButton.setOnClickListener(view -> { + friendButton.setBackgroundColor(Color.parseColor("#afafb0")); + genreButton.setBackgroundColor(Color.WHITE); + prepareFriendList(null); + }); + + // サイドメニューのフィルターのリストの準備 + genreData = new String[5]; + friendsData = new String[5]; + genreData[0] = "和食"; + genreData[1] = "中華"; + genreData[2] = "イタリアン"; + genreData[3] = "洋食"; + genreData[4] = "ジャンクフード"; + + friendsData[0] = "iyo"; + friendsData[1] = "iyo2"; + friendsData[2] = "superiyo"; + friendsData[3] = "perfectiyo"; + friendsData[4] = "finaliyo"; + + listData = new ArrayList<>(); + list = findViewById(R.id.drawer_list); + prepareGenreList(null); + + // フィルターを有効にする + list.setTextFilterEnabled(true); + + //サイドメニューの検索バー + SearchView listSearch = findViewById(R.id.drawer_search); + listSearch.setOnQueryTextListener( + new SearchView.OnQueryTextListener() { + // 入力テキストに変更があったとき + @Override + public boolean onQueryTextChange(String s) { + if(isGenre){ + if(s.equals("")){ + prepareGenreList(null); + } else { + prepareGenreList(s); + } + } else { + if(s.equals("")){ + prepareFriendList(null); + } else { + prepareFriendList(s); + } + } + return false; + } + + // 検索ボタンを押したとき + @Override + public boolean onQueryTextSubmit(String s) { + return false; + } + } + ); + } + //右上のメニューを用意、マイページ画面への遷移 @Override public boolean onCreateOptionsMenu(@NonNull Menu menu) { getMenuInflater().inflate(R.menu.tool_menu, menu); @@ -58,4 +184,140 @@ return super.onOptionsItemSelected(item); } + + public void prepareGenreList(String s){ + // 現在表示されているリストがジャンルのリストかどうかを設定 + isGenre = true; + + // 一度リストのデータを取り除いてから追加する + listData.clear(); + for(int i = 0; i < genreData.length; i++){ + if(s == null) { + FilterDataModel fd = new FilterDataModel(); + fd.setText(genreData[i]); + listData.add(fd); + } else { + if(genreData[i].contains(s)){ + FilterDataModel fd = new FilterDataModel(); + fd.setText(genreData[i]); + listData.add(fd); + } + } + } + + // ListViewにデータをセットする + list.setAdapter(new MyAdapter( + this, + R.layout.filter_layout, + listData + )); + list.deferNotifyDataSetChanged(); + } + + public void prepareFriendList(String s){ + // 現在表示されているリストがジャンルのリストかどうかを設定 + isGenre = false; + + // 一度リストのデータを取り除いてから追加する + listData.clear(); + for(int i = 0; i < friendsData.length; i++){ + if(s == null) { + FilterDataModel fd = new FilterDataModel(); + fd.setText(friendsData[i]); + listData.add(fd); + } else { + if(friendsData[i].contains(s)){ + FilterDataModel fd = new FilterDataModel(); + fd.setText(friendsData[i]); + listData.add(fd); + } + } + } + + // ListViewにデータをセットする + list.setAdapter(new MyAdapter( + this, + R.layout.filter_layout, + listData + )); + list.deferNotifyDataSetChanged(); + } + + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + return false; + } + + // 内部クラス + private class MyAdapter extends ArrayAdapter { + private LayoutInflater layoutInflater; + public MyAdapter(Context context, int resourceId, List objects){ + super(context, resourceId, objects); + + layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + // 画面外に行ったときにチェックがずれないようにする + @Override + public View getView(int position, View convertView, ViewGroup parent) { + FilterDataModel item = (FilterDataModel) getItem(position); + if (convertView == null) { + convertView = layoutInflater.inflate(R.layout.filter_item, null); + } + + TextView textView = convertView.findViewById(R.id.filter_text); + textView.setText(item.text); + CheckBox checkBox = convertView.findViewById(R.id.filter_checkbox); + checkBox.setOnCheckedChangeListener(null); + checkBox.setChecked(item.isChecked); + + // チェックボックスを押したときの処理 + checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if(b) { + if(isGenre) { + //Toast.makeText(MapsActivity.this, listData.get(position).getText(), Toast.LENGTH_SHORT).show(); + nemophila.setSelectGenres(listData.get(position).getText()); + } else { + nemophila.setSelectFriends(listData.get(position).getText()); + } + } else { + if(isGenre) { + //Toast.makeText(MapsActivity.this, listData.get(position).getText(), Toast.LENGTH_SHORT).show(); + nemophila.removeSelectGenres(listData.get(position).getText()); + } else { + nemophila.removeSelectFriends(listData.get(position).getText()); + } + } + FilterDataModel data = getItem(position); + data.isChecked = b; + } + }); + + return convertView; + } + } + + private static class FilterDataModel{ + private String text; + private boolean isChecked; + + public String getText() { + return text; + } + + public boolean isChecked() { + return isChecked; + } + + public void setText(String text) { + this.text = text; + } + + public void setChecked(boolean checked) { + isChecked = checked; + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/nemophila/MapsFragment.java b/app/src/main/java/com/example/nemophila/MapsFragment.java index a1c429c..212503d 100644 --- a/app/src/main/java/com/example/nemophila/MapsFragment.java +++ b/app/src/main/java/com/example/nemophila/MapsFragment.java @@ -78,6 +78,7 @@ nemophila = (Nemophila) getActivity().getApplication(); mMap = googleMap; + //ViewModelへのアクセス shopsViewModel = new ViewModelProvider(getActivity()).get(ShopsViewModel.class); diff --git a/app/src/main/res/layout/activity_maps.xml b/app/src/main/res/layout/activity_maps.xml index 7636d4b..df097a4 100644 --- a/app/src/main/res/layout/activity_maps.xml +++ b/app/src/main/res/layout/activity_maps.xml @@ -29,9 +29,10 @@ app:menu="@menu/tool_menu"> + android:layout_height="wrap_content" + app:queryHint="地名検索"/> @@ -68,6 +69,61 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" - app:menu="@menu/navdrawer_menu" /> + > + + + + + + +