From 110d6197d161bb9727cc4fba2ac534eb24b065e3 Mon Sep 17 00:00:00 2001 From: Caleb Fontenot Date: Sat, 17 Feb 2024 21:46:05 -0600 Subject: [PATCH] =?UTF-8?q?(=E2=95=AF=C2=B0=E2=96=A1=C2=B0)=E2=95=AF?= =?UTF-8?q?=EF=B8=B5=20=E2=94=BB=E2=94=81=E2=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.idea/deploymentTargetDropDown.xml | 3 + .../app/src/main/AndroidManifest.xml | 2 +- .../crimeactivity/CrimeActivity.java | 24 ++------ .../calebfontenot/crimeactivity/CrimeLab.java | 40 ++++++++++++ .../crimeactivity/CrimeListActivity.java | 14 +++++ .../crimeactivity/CrimeListFragment.java | 61 +++++++++++++++++++ .../crimeactivity/SingleFragmentActivity.java | 26 ++++++++ ...ctivity_main.xml => activity_fragment.xml} | 0 .../main/res/layout/fragment_crime_list.xml | 6 ++ .../src/main/res/layout/list_item_crime.xml | 17 ++++++ .../app/src/main/res/values/strings.xml | 1 + 11 files changed, 173 insertions(+), 21 deletions(-) create mode 100644 Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeLab.java create mode 100644 Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeListActivity.java create mode 100644 Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeListFragment.java create mode 100644 Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/SingleFragmentActivity.java rename Assignments/CrimeActivity/app/src/main/res/layout/{activity_main.xml => activity_fragment.xml} (100%) create mode 100644 Assignments/CrimeActivity/app/src/main/res/layout/fragment_crime_list.xml create mode 100644 Assignments/CrimeActivity/app/src/main/res/layout/list_item_crime.xml diff --git a/Assignments/CrimeActivity/.idea/deploymentTargetDropDown.xml b/Assignments/CrimeActivity/.idea/deploymentTargetDropDown.xml index 0c0c338..74585ee 100644 --- a/Assignments/CrimeActivity/.idea/deploymentTargetDropDown.xml +++ b/Assignments/CrimeActivity/.idea/deploymentTargetDropDown.xml @@ -2,6 +2,9 @@ + + + diff --git a/Assignments/CrimeActivity/app/src/main/AndroidManifest.xml b/Assignments/CrimeActivity/app/src/main/AndroidManifest.xml index f805d40..fc403e3 100644 --- a/Assignments/CrimeActivity/app/src/main/AndroidManifest.xml +++ b/Assignments/CrimeActivity/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ android:theme="@style/Theme.CrimeActivity" tools:targetApi="31"> diff --git a/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeActivity.java b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeActivity.java index dd6d942..2bc85a3 100644 --- a/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeActivity.java +++ b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeActivity.java @@ -1,26 +1,10 @@ package com.calebfontenot.crimeactivity; -import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; - -import android.os.Bundle; - -public class CrimeActivity extends AppCompatActivity { +public class CrimeActivity extends SingleFragmentActivity{ @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - FragmentManager fm = getSupportFragmentManager(); - Fragment fragment = fm.findFragmentById(R.id.fragment_container); - - if (fragment == null) { - fragment = new CrimeFragment(); - fm.beginTransaction() - .add(R.id.fragment_container, - fragment).commit(); - } + protected Fragment createFragment() { + return new CrimeFragment(); } -} \ No newline at end of file +} diff --git a/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeLab.java b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeLab.java new file mode 100644 index 0000000..e1dbd6b --- /dev/null +++ b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeLab.java @@ -0,0 +1,40 @@ +package com.calebfontenot.crimeactivity; + +import android.content.Context; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class CrimeLab { + private static CrimeLab sCrimeLab; + private List mCrimes; + public static CrimeLab get(Context context) { + if (sCrimeLab == null) { + sCrimeLab = new CrimeLab(context); + } + return sCrimeLab; + } + private CrimeLab(Context context) { + mCrimes = new ArrayList<>(); + for (int i = 0; i < 100; ++i) { + Crime crime = new Crime(); + crime.setmTitle("Crime #" + i); + crime.setmSolved(i % 2 == 0); + mCrimes.add(crime); + } + } + + public List getCrimes() { + return mCrimes; + } + + public Crime getCrime(UUID id) { + for (Crime crime: mCrimes) { + if (crime.getmId().equals(id)) { + return crime; + } + } + return null; + } +} diff --git a/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeListActivity.java b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeListActivity.java new file mode 100644 index 0000000..5277e54 --- /dev/null +++ b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeListActivity.java @@ -0,0 +1,14 @@ +package com.calebfontenot.crimeactivity; + +import androidx.fragment.app.Fragment; + +public class CrimeListActivity extends SingleFragmentActivity { + public CrimeListActivity() { + createFragment(); + } + + @Override + protected Fragment createFragment() { + return new CrimeListFragment(); + } +} \ No newline at end of file diff --git a/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeListFragment.java b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeListFragment.java new file mode 100644 index 0000000..837a3b3 --- /dev/null +++ b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/CrimeListFragment.java @@ -0,0 +1,61 @@ +package com.calebfontenot.crimeactivity; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +public class CrimeListFragment extends Fragment { + private RecyclerView mCrimeRecyclerView; + private CrimeAdapter mAdapter; + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_crime_list, container, false); + mCrimeRecyclerView = (RecyclerView) view.findViewById(R.id.crime_recycler_view); + mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + updateUI(); + return view; + } + private void updateUI() { + CrimeLab crimeLab = CrimeLab.get(getActivity()); + List crimes = crimeLab.getCrimes(); + mAdapter = new CrimeAdapter(crimes); + mCrimeRecyclerView.setAdapter(mAdapter); + } + private static class CrimeHolder extends RecyclerView.ViewHolder { + public CrimeHolder(LayoutInflater inflater, ViewGroup parent) { + super(inflater.inflate(R.layout.list_item_crime, parent, false)); + } + } + private class CrimeAdapter extends RecyclerView.Adapter { + private List mCrimes; + public CrimeAdapter(List crimes) { + mCrimes = crimes; + } + @NonNull + @Override + public CrimeHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); + return new CrimeHolder(layoutInflater, parent); + } + + @Override + public void onBindViewHolder(@NonNull CrimeHolder holder, int position) { + + } + + @Override + public int getItemCount() { + return mCrimes.size(); + } + } +} \ No newline at end of file diff --git a/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/SingleFragmentActivity.java b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/SingleFragmentActivity.java new file mode 100644 index 0000000..757f0a1 --- /dev/null +++ b/Assignments/CrimeActivity/app/src/main/java/com/calebfontenot/crimeactivity/SingleFragmentActivity.java @@ -0,0 +1,26 @@ +package com.calebfontenot.crimeactivity; + +import android.os.Bundle; +import android.os.PersistableBundle; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; + +public abstract class SingleFragmentActivity extends AppCompatActivity { + protected abstract Fragment createFragment(); + + @Override + public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fragment); + + FragmentManager fm = getSupportFragmentManager(); + Fragment fragment = fm.findFragmentById(R.id.fragment_container); + if (fragment == null) { + fragment = createFragment(); + fm.beginTransaction().add(R.id.fragment_container, fragment).commit(); + } + } +} diff --git a/Assignments/CrimeActivity/app/src/main/res/layout/activity_main.xml b/Assignments/CrimeActivity/app/src/main/res/layout/activity_fragment.xml similarity index 100% rename from Assignments/CrimeActivity/app/src/main/res/layout/activity_main.xml rename to Assignments/CrimeActivity/app/src/main/res/layout/activity_fragment.xml diff --git a/Assignments/CrimeActivity/app/src/main/res/layout/fragment_crime_list.xml b/Assignments/CrimeActivity/app/src/main/res/layout/fragment_crime_list.xml new file mode 100644 index 0000000..12209a4 --- /dev/null +++ b/Assignments/CrimeActivity/app/src/main/res/layout/fragment_crime_list.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/Assignments/CrimeActivity/app/src/main/res/layout/list_item_crime.xml b/Assignments/CrimeActivity/app/src/main/res/layout/list_item_crime.xml new file mode 100644 index 0000000..dcd9b3e --- /dev/null +++ b/Assignments/CrimeActivity/app/src/main/res/layout/list_item_crime.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/Assignments/CrimeActivity/app/src/main/res/values/strings.xml b/Assignments/CrimeActivity/app/src/main/res/values/strings.xml index 42ecb3d..0d35b51 100644 --- a/Assignments/CrimeActivity/app/src/main/res/values/strings.xml +++ b/Assignments/CrimeActivity/app/src/main/res/values/strings.xml @@ -4,4 +4,5 @@ Enter a title for the crime. Details Solved + Crime Title \ No newline at end of file