diff --git a/app/src/main/java/com/example/citrusclient/views/MainActivity.java b/app/src/main/java/com/example/citrusclient/views/MainActivity.java index 0e92ec5..371c2d0 100644 --- a/app/src/main/java/com/example/citrusclient/views/MainActivity.java +++ b/app/src/main/java/com/example/citrusclient/views/MainActivity.java @@ -76,7 +76,7 @@ if(itemId == R.id.book){// 本棚 showFragment(new MyBookshelfFragment()); } else if(itemId == R.id.search){//検索 - + showFragment(new SearchFragment()); } else if(itemId == R.id.home){//ホーム showFragment(new HomeFragment()); }else if(itemId == R.id.calendar){ //カレンダ diff --git a/app/src/main/java/com/example/citrusclient/views/SearchFragment.java b/app/src/main/java/com/example/citrusclient/views/SearchFragment.java new file mode 100644 index 0000000..8c49eec --- /dev/null +++ b/app/src/main/java/com/example/citrusclient/views/SearchFragment.java @@ -0,0 +1,211 @@ +package com.example.citrusclient.views; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.example.citrusclient.Citrus; +import com.example.citrusclient.R; +import com.example.citrusclient.models.Book; +import com.example.citrusclient.viewmodels.PublicBooksViewModel; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link SearchFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class SearchFragment extends Fragment { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public SearchFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment SearchFragment. + */ + // TODO: Rename and change types and number of parameters + public static SearchFragment newInstance(String param1, String param2) { + SearchFragment fragment = new SearchFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + private ArrayList publicList; + private ArrayList name; + PublicBooksViewModel publicBooksViewModel; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + + publicBooksViewModel = new ViewModelProvider(this).get(PublicBooksViewModel.class); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_search, container, false); + } + + 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<>(); + + 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(int i = 0; i < books.size(); i++){ + name.add(books.get(i).getAccountId()); + } + publicList = new ArrayList<>(books); + }else{ + publicList = new ArrayList<>(); + } + publicAdapter.setBooks(publicList); + System.out.println(name); + } + }); + publicBooksViewModel.loadAllBooks(); + } +} + +class PublicAdapter extends RecyclerView.Adapter{ + + private List publicList; + private List accountIdList; + private Context context; + + PublicAdapter(List id, List publics, Context context){ + this.accountIdList = id; + this.publicList = publics; + this.context = context; + } + + public void setBooks(List publics){ + publicList = publics; + notifyDataSetChanged(); + } + + @NonNull + @Override + public PublicViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.a_public_book, parent, false); + return new PublicViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull PublicAdapter.PublicViewHolder holder, int position) { + holder.idText.setText(accountIdList.get(position).toString()); + holder.idText.setHeight(30); + holder.idText.setWidth(100); + Book publicData = this.publicList.get(position); + holder.publicButton.setText(publicData.getTitle()); + int red; + int green; + int blue; + if (publicData.getColor() == null) { + red = 255; + green = 255; + blue = 255; + } else if (publicData.getColor().length() < 7) { + red = 255; + green = 255; + blue = 255; + } else { + red = Integer.parseInt(publicData.getColor().substring(1, 3), 16); + green = Integer.parseInt(publicData.getColor().substring(3, 5), 16); + blue = Integer.parseInt(publicData.getColor().substring(5, 7), 16); + } + + holder.publicButton.setBackgroundColor(Color.rgb(red, green, blue)); + holder.publicButton.setTextColor(Color.rgb(255 - red, 255 - green, 255 - blue)); + holder.publicButton.setOnClickListener(v -> { + Calendar c = Calendar.getInstance(); + Activity activity = (Activity) context; + Citrus citrus = (Citrus) activity.getApplication(); + citrus.setCurYear(c.get(Calendar.YEAR)); + citrus.setCurMonth(c.get(Calendar.MONTH) + 1); + citrus.setCurDay(c.get(Calendar.DATE)); + citrus.setCurBookId(publicData.getBookId()); + ((MainActivity) activity).showFragment(new HomeFragment()); + + }); + + } + + @Override + public int getItemCount() { + return publicList.size(); + } + + static class PublicViewHolder extends RecyclerView.ViewHolder{ + Button publicButton; + TextView idText; + public PublicViewHolder(@NonNull View itemView){ + + super(itemView); + publicButton = itemView.findViewById(R.id.public_button); + idText = itemView.findViewById(R.id.public_id); + } + } +} + + +/*recyclerviewの中にrecyclerviewを入れよう(縦スクに横スクをいれる感じ) +linearlayoutを縦にいれる + + */ \ No newline at end of file diff --git a/app/src/main/res/layout/a_public_book.xml b/app/src/main/res/layout/a_public_book.xml new file mode 100644 index 0000000..513c9af --- /dev/null +++ b/app/src/main/res/layout/a_public_book.xml @@ -0,0 +1,31 @@ + + + +