diff --git a/app/src/main/java/com/example/citrusclient/views/MyAdapter.java b/app/src/main/java/com/example/citrusclient/views/MyAdapter.java new file mode 100644 index 0000000..26dee74 --- /dev/null +++ b/app/src/main/java/com/example/citrusclient/views/MyAdapter.java @@ -0,0 +1,166 @@ +//package com.example.citrusclient.views; +// +//import android.view.LayoutInflater; +//import android.view.View; +//import android.view.ViewGroup; +//import android.widget.TextView; +// +//import androidx.recyclerview.widget.RecyclerView; +// +//import com.example.citrusclient.R; +//import com.example.citrusclient.models.Book; +// +//import java.util.ArrayList; +//import java.util.List; +// +//public class MyAdapter extends RecyclerView.Adapter { +// private List originalList; // 元のデータリスト +// private List filteredList; +// +// public MyAdapter(List originalList) { +// this.originalList = originalList; +// this.filteredList = new ArrayList<>(originalList); +// } +// +// @Override +// public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { +// View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.a_public_book, parent, false); +// return new ViewHolder(view); +// } +// +// @Override +// public void onBindViewHolder(ViewHolder holder, int position) { +// Book currentBook = filteredList.get(position); +// holder.bind(currentBook); +// } +// +// @Override +// public int getItemCount() { +// return filteredList.size(); +// } +// +// public void filter(String query) { +// filteredList.clear(); +// if (query.isEmpty()) { +// filteredList.addAll(originalList); +// } else { +// String[] queryWords = query.toLowerCase().trim().split("\\s+"); +// for (Book item : originalList) { +// boolean matchesAll = true; +// for (String word : queryWords) { +// if (!item.getAccountId().toLowerCase().contains(word)) { +// matchesAll = false; +// break; +// } +// } +// if (matchesAll) { +// filteredList.add(item); +// } +// } +// } +// notifyDataSetChanged(); +// } +// +// public void setBooks(ArrayList publicList) { +// } +// +// static class ViewHolder extends RecyclerView.ViewHolder { +// TextView titleTextView; +// TextView authorTextView; +// +// ViewHolder(View itemView) { +// super(itemView); +// titleTextView = itemView.findViewById(R.id.public_button); +// authorTextView = itemView.findViewById(R.id.public_id); +// } +// +// void bind(Book book) { +// titleTextView.setText(book.getTitle()); +// authorTextView.setText(book.getAccountId()); +// } +// } +//} + +package com.example.citrusclient.views; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.citrusclient.R; +import com.example.citrusclient.models.Book; + +import java.util.ArrayList; +import java.util.List; + +public class MyAdapter extends RecyclerView.Adapter { + private List originalList; // 元のデータリスト + private List filteredList; // フィルタリングされたリスト + + public MyAdapter(List originalList) { + this.originalList = originalList; + this.filteredList = new ArrayList<>(originalList); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.a_public_book, parent, false); + return new ViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + Book currentBook = filteredList.get(position); + holder.bind(currentBook); + } + + @Override + public int getItemCount() { + return filteredList.size(); + } + + // 新しいデータを設定するメソッド + public void setBooks(List books) { + originalList.clear(); + originalList.addAll(books); + filter(""); // 空のクエリで全てのアイテムを表示 + } + + // フィルタリングメソッド + public void filter(String query) { + filteredList.clear(); + if (query.isEmpty()) { + filteredList.addAll(originalList); + } else { + String lowerCaseQuery = query.toLowerCase().trim(); + for (Book item : originalList) { + if (item.getAccountId().toLowerCase().contains(lowerCaseQuery) || + item.getTitle().toLowerCase().contains(lowerCaseQuery)) { + filteredList.add(item); + } + } + } + notifyDataSetChanged(); + } + + static class ViewHolder extends RecyclerView.ViewHolder { + TextView titleTextView; + TextView authorTextView; + + ViewHolder(View itemView) { + super(itemView); + titleTextView = itemView.findViewById(R.id.public_button); + authorTextView = itemView.findViewById(R.id.public_id); + } + + void bind(Book book) { + titleTextView.setText(book.getTitle()); + authorTextView.setText(book.getAccountId()); + } + } +} diff --git a/app/src/main/java/com/example/citrusclient/views/SearchFragment.java b/app/src/main/java/com/example/citrusclient/views/SearchFragment.java index 41509ac..4747d5b 100644 --- a/app/src/main/java/com/example/citrusclient/views/SearchFragment.java +++ b/app/src/main/java/com/example/citrusclient/views/SearchFragment.java @@ -1,11 +1,13 @@ package com.example.citrusclient.views; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import androidx.annotation.NonNull; +import androidx.core.view.MenuItemCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.Observer; @@ -13,11 +15,16 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import android.text.Editable; +import android.util.Log; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.EditText; import android.widget.LinearLayout; +import android.widget.SearchView; import android.widget.TextView; import com.example.citrusclient.Citrus; @@ -49,6 +56,18 @@ // Required empty public constructor } + private static final String TAG = SearchFragment.class.getSimpleName(); + private final SearchFragment self = this; + + private SearchView searchView; + private String searchWord; + + private int sortBy = 0; + + EditText editText; + + private MyAdapter adapter; + /** * Use this factory method to create a new instance of * this fragment using the provided parameters. @@ -89,37 +108,110 @@ return inflater.inflate(R.layout.fragment_search, container, false); } + @SuppressLint("WrongViewCast") public void onViewCreated(@NonNull View view, @NonNull Bundle saveInstanceState){ super.onViewCreated(view, saveInstanceState); -// LinearLayout layout = new LinearLayout(requireContext()); -// Citrus citrus = (Citrus)(getActivity().getApplication()); - publicList = new ArrayList<>(); - name = new ArrayList<>(); +// publicList = new ArrayList<>(); +// name = new ArrayList<>(); +// +// RecyclerView recyclerView = view.findViewById(R.id.public_list); +// recyclerView.setHasFixedSize(true); +// recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); +// RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(view.getContext()); +// recyclerView.setLayoutManager(layoutManager); +// PublicAdapter publicAdapter = new PublicAdapter(name, publicList, getActivity()); +// recyclerView.setAdapter(publicAdapter); +// publicBooksViewModel.getAllBooksLiveData().observe(getViewLifecycleOwner(), new Observer>() { +// @Override +// public void onChanged(ArrayList books) { +// if (books != null) { +// for (Book book : books) { +// name.add(book.getAccountId()); +// } +// publicList = new ArrayList<>(books); +// } else { +// publicList = new ArrayList<>(); +// } +// adapter = new MyAdapter(publicList); // アダプターを更新 +// recyclerView.setAdapter(adapter); // アダプターを再設定 +// adapter.notifyDataSetChanged(); // アダプターに変更を通知 +// System.out.println(name); +// adapter = new MyAdapter(publicList); +// recyclerView.setAdapter(adapter); +// recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); +// } +// }); +// publicBooksViewModel.loadAllBooks(); +// +// SearchView searchView = view.findViewById(R.id.search_word); +// searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { +// @Override +// public boolean onQueryTextSubmit(String query) { +// loadSearchResults(query); +// return false; +// } +// +// @Override +// public boolean onQueryTextChange(String newText) { +// adapter.filter(newText); +// return true; +// } +// }); + adapter = new MyAdapter(new ArrayList<>()); RecyclerView recyclerView = view.findViewById(R.id.public_list); - recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); - RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(view.getContext()); - recyclerView.setLayoutManager(layoutManager); - PublicAdapter publicAdapter = new PublicAdapter(name, publicList, getActivity()); - recyclerView.setAdapter(publicAdapter); + recyclerView.setAdapter(adapter); + publicBooksViewModel.getAllBooksLiveData().observe(getViewLifecycleOwner(), new Observer>() { @Override public void onChanged(ArrayList books) { - if(books != null){ - for(int i = 0; i < books.size(); i++){ - name.add(books.get(i).getAccountId()); - } + if (books != null) { publicList = new ArrayList<>(books); - }else{ - publicList = new ArrayList<>(); + adapter.setBooks(publicList); // アダプターに新しいリストを渡す } - publicAdapter.setBooks(publicList); - System.out.println(name); } }); + publicBooksViewModel.loadAllBooks(); + + SearchView searchView = view.findViewById(R.id.search_word); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + loadSearchResults(query); + Log.d(TAG, "Search query: " + query); + return true; + } + + @Override + public boolean onQueryTextChange(String newText) { + //adapter.filter(newText); // フィルタリングを実行 + loadSearchResults(newText); + System.out.println("aho"); + return true; + } + }); + } + + private void loadSearchResults(String query) { + // 空白で分割 + String[] parts = query.split(" "); + String title = parts.length > 0 ? parts[0] : ""; // 最初の部分をtitleに + String accountId = parts.length > 1 ? parts[1] : ""; // 2番目の部分をaccountIdに + Integer sortBy = 1; + //if(sortBy != null) sortBy = sort;//ソートはまだ + Log.d(TAG, "Search query: " + title + accountId); + + if(title != null){ + if(accountId != null){ + publicBooksViewModel.loadSearchBooks(title, accountId, sortBy);//title,accountidでの検索 + }else publicBooksViewModel.loadSearchTitleBooks(title, sortBy);//titleのみの検索 + if(accountId != null){ + publicBooksViewModel.loadSearchAccountIdBooks(accountId, sortBy);//accountidでの検索 + }else publicBooksViewModel.loadAllBooks(); + // titleとaccountIdを使って検索 } } @@ -183,7 +275,6 @@ // citrus.setCurBookId(publicData.getBookId()); // ((MainActivity) activity).showFragment(new HomeFragment()); // }); - } @Override @@ -201,10 +292,4 @@ idText = itemView.findViewById(R.id.public_id); } } -} - - -/*recyclerviewの中にrecyclerviewを入れよう(縦スクに横スクをいれる感じ) -linearlayoutを縦にいれる - - */ \ No newline at end of file +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 2b8dec3..755584c 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -7,6 +7,7 @@ tools:context=".views.SearchFragment"> + + android:layout_height="80dp" + android:layout_marginTop="60dp" /> + android:layout_marginTop="140dp"> + + \ No newline at end of file