From 724989b8b0af3380ff9957c1b7e21e46d9553e48 Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Tue, 1 Sep 2020 00:07:18 -0700 Subject: [PATCH] Adds Monster fragment to view a monster's card. Adds query box and search button to search fragment. Makes the search button show a monster card. --- .../ui/monster/MonsterFragment.java | 35 +++++++++++++++++++ .../ui/monster/MonsterViewModel.java | 19 ++++++++++ .../ui/search/SearchFragment.java | 16 +++++++-- .../ui/search/SearchViewModel.java | 10 +++--- app/src/main/res/layout/fragment_monster.xml | 22 ++++++++++++ app/src/main/res/layout/fragment_search.xml | 28 ++++++++++----- app/src/main/res/values/strings.xml | 2 ++ build.gradle | 3 ++ 8 files changed, 119 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterFragment.java create mode 100644 app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterViewModel.java create mode 100644 app/src/main/res/layout/fragment_monster.xml diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterFragment.java new file mode 100644 index 0000000..3d97750 --- /dev/null +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterFragment.java @@ -0,0 +1,35 @@ +package com.majinnaibu.monstercards.ui.monster; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProviders; + +import com.majinnaibu.monstercards.R; + +public class MonsterFragment extends Fragment { + + private MonsterViewModel monsterViewModel; + + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + monsterViewModel = + ViewModelProviders.of(this).get(MonsterViewModel.class); + View root = inflater.inflate(R.layout.fragment_monster, container, false); + final TextView textView = root.findViewById(R.id.text_monster); + monsterViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { + @Override + public void onChanged(@Nullable String s) { + textView.setText(s); + } + }); + return root; + } +} diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterViewModel.java new file mode 100644 index 0000000..b4c14c3 --- /dev/null +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/monster/MonsterViewModel.java @@ -0,0 +1,19 @@ +package com.majinnaibu.monstercards.ui.monster; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class MonsterViewModel extends ViewModel { + + private MutableLiveData mText; + + public MonsterViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is monster fragment"); + } + + public LiveData getText() { + return mText; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchFragment.java b/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchFragment.java index 0f61fb6..ce42921 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchFragment.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.TextView; import androidx.annotation.NonNull; @@ -11,6 +12,8 @@ import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; +import androidx.navigation.NavDirections; +import androidx.navigation.Navigation; import com.majinnaibu.monstercards.R; @@ -23,13 +26,22 @@ public class SearchFragment extends Fragment { searchViewModel = ViewModelProviders.of(this).get(SearchViewModel.class); View root = inflater.inflate(R.layout.fragment_search, container, false); - final TextView textView = root.findViewById(R.id.text_search); - searchViewModel.getText().observe(getViewLifecycleOwner(), new Observer() { + final TextView textView = root.findViewById(R.id.search_query); + searchViewModel.getSearchQuery().observe(getViewLifecycleOwner(), new Observer() { @Override public void onChanged(@Nullable String s) { textView.setText(s); } }); + + final Button btnSearch = root.findViewById(R.id.button_search); + btnSearch.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + NavDirections action = SearchFragmentDirections.actionNavigationSearchToNavigationMonster(); + Navigation.findNavController(view).navigate(action); + } + }); return root; } } diff --git a/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchViewModel.java b/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchViewModel.java index 6e3a48b..e8fc25d 100644 --- a/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchViewModel.java +++ b/app/src/main/java/com/majinnaibu/monstercards/ui/search/SearchViewModel.java @@ -6,14 +6,14 @@ import androidx.lifecycle.ViewModel; public class SearchViewModel extends ViewModel { - private MutableLiveData mText; + private MutableLiveData mSearchQuery; public SearchViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("This is search fragment"); + mSearchQuery = new MutableLiveData<>(); + mSearchQuery.setValue(""); } - public LiveData getText() { - return mText; + public LiveData getSearchQuery() { + return mSearchQuery; } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_monster.xml b/app/src/main/res/layout/fragment_monster.xml new file mode 100644 index 0000000..9400058 --- /dev/null +++ b/app/src/main/res/layout/fragment_monster.xml @@ -0,0 +1,22 @@ + + + + + \ 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 e6e5fe6..0eb1ff6 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -4,20 +4,30 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.search.SearchFragment"> + tools:context=".ui.search.SearchFragment" + tools:targetApi="o"> - + + - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b171c0f..232856a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,4 +4,6 @@ Search Collections Library + Search + Query \ No newline at end of file diff --git a/build.gradle b/build.gradle index 6754c23..ff5deb3 100644 --- a/build.gradle +++ b/build.gradle @@ -7,6 +7,9 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:4.0.1" + def nav_version = "2.3.0" + classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" + // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }