package com.example.nemophila; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.Toolbar; import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.DialogFragment; import androidx.navigation.NavController; import androidx.navigation.fragment.NavHostFragment; import androidx.navigation.ui.AppBarConfiguration; import androidx.navigation.ui.NavigationUI; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.google.android.material.navigation.NavigationView; import java.util.ArrayList; import java.util.List; public class MapsActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { Nemophila nemophila; DialogFragment filterDialog; private Handler handler; // フィルターのリスト用 ArrayList<FilterDataModel> 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); // 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(); // NavigationView Listener NavigationView navigationView = (NavigationView) findViewById(R.id.navView); navigationView.setNavigationItemSelectedListener(this); // geocode Test handler = new Handler(); // // 検索バーの処理 // 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); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent = new Intent(MapsActivity.this, MyPageActivity.class); startActivity(intent); 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<FilterDataModel> { private LayoutInflater layoutInflater; public MyAdapter(Context context, int resourceId, List<FilterDataModel> 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); //チェック済みの項目をチェックにしておく if(isGenre) { checkBox.setChecked(nemophila.getSelectGenres().contains(item.getText())); } else { checkBox.setChecked(nemophila.getSelectFriends().contains(item.getText())); } // チェックボックスを押したときの処理 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; } } }