From 8ee64b7e251a64d5cdd7a1357cb34b9d18483da3 Mon Sep 17 00:00:00 2001 From: Madalin Date: Tue, 6 Jul 2021 16:02:23 +0300 Subject: [PATCH 1/3] Rename the files and add the code for solving the second code challenge, using Student class with FirstName and LastName. --- .../EmailAdapter.java | 40 ----------------- .../EmailViewHolder.java | 30 ------------- .../androidfundamentalsmai2021/Mail.java | 37 ---------------- .../StartActivity.java | 2 +- .../androidfundamentalsmai2021/Student.java | 37 ++++++++++++++++ ...ailsActivity.java => StudentActivity.java} | 33 +++++++------- .../StudentAdapter.java | 43 +++++++++++++++++++ .../StudentViewHolder.java | 36 ++++++++++++++++ ...ivity_emails.xml => activity_students.xml} | 4 +- .../{email_item.xml => student_item.xml} | 8 ++-- app/src/main/res/values/strings.xml | 2 +- 11 files changed, 139 insertions(+), 133 deletions(-) delete mode 100644 app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailAdapter.java delete mode 100644 app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailViewHolder.java delete mode 100644 app/src/main/java/com/magdamiu/androidfundamentalsmai2021/Mail.java create mode 100644 app/src/main/java/com/magdamiu/androidfundamentalsmai2021/Student.java rename app/src/main/java/com/magdamiu/androidfundamentalsmai2021/{EmailsActivity.java => StudentActivity.java} (52%) create mode 100644 app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentAdapter.java create mode 100644 app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentViewHolder.java rename app/src/main/res/layout/{activity_emails.xml => activity_students.xml} (84%) rename app/src/main/res/layout/{email_item.xml => student_item.xml} (70%) diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailAdapter.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailAdapter.java deleted file mode 100644 index aba7a85..0000000 --- a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailAdapter.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.magdamiu.androidfundamentalsmai2021; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.List; - -public class EmailAdapter extends RecyclerView.Adapter { - private List emails; - - public EmailAdapter(List emails) { - this.emails = emails; - } - - // creates the item view, only the ui elements (it's like a template) - @NonNull - @Override - public EmailViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.email_item, parent, false); - return new EmailViewHolder(itemView); - } - - // fills the item with the corresponding element from the list (data source) - @Override - public void onBindViewHolder(@NonNull EmailViewHolder holder, int position) { - Mail currentMail = emails.get(position); - holder.getTextViewSender().setText(currentMail.getSenderName()); - holder.getTextViewSubject().setText(currentMail.getSubject()); - } - - // decides how many items(total number) to create in our recycler view - @Override - public int getItemCount() { - return emails.size(); - } -} diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailViewHolder.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailViewHolder.java deleted file mode 100644 index 08128fe..0000000 --- a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailViewHolder.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.magdamiu.androidfundamentalsmai2021; - -import android.view.View; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -// the class associated to the item of the recycler view -// each ui element from the item should have a dedicated field in this class -public class EmailViewHolder extends RecyclerView.ViewHolder { - final private TextView textViewSender; - final private TextView textViewSubject; - - public EmailViewHolder(@NonNull View itemView) { - super(itemView); - - textViewSender = itemView.findViewById(R.id.textViewSender); - textViewSubject = itemView.findViewById(R.id.textViewSubject); - } - - - public TextView getTextViewSender() { - return textViewSender; - } - - public TextView getTextViewSubject() { - return textViewSubject; - } -} diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/Mail.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/Mail.java deleted file mode 100644 index 33eff91..0000000 --- a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/Mail.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.magdamiu.androidfundamentalsmai2021; - -public class Mail { - private int id; - private String senderName; - private String subject; - - public Mail(int id, String senderName, String subject) { - this.id = id; - this.senderName = senderName; - this.subject = subject; - } - - public String getSenderName() { - return senderName; - } - - public void setSenderName(String senderName) { - this.senderName = senderName; - } - - public String getSubject() { - return subject; - } - - public void setSubject(String subject) { - this.subject = subject; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } -} diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StartActivity.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StartActivity.java index 8228918..a421a9e 100644 --- a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StartActivity.java +++ b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StartActivity.java @@ -22,7 +22,7 @@ public void startMainActivityOnClick(View view) { public void startRecyclerViewActivityOnClick(View view) { // starts from the current activity, and moves the user to the EmailsActivity screen - Intent intentToStartEmailsActivity = new Intent(StartActivity.this, EmailsActivity.class); + Intent intentToStartEmailsActivity = new Intent(StartActivity.this, StudentActivity.class); startActivity(intentToStartEmailsActivity); } diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/Student.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/Student.java new file mode 100644 index 0000000..b8a1617 --- /dev/null +++ b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/Student.java @@ -0,0 +1,37 @@ +package com.magdamiu.androidfundamentalsmai2021; + +public class Student { + private int id; + private String firstName; + private String lastName; + + public Student(int id, String firstName, String lastName) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailsActivity.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentActivity.java similarity index 52% rename from app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailsActivity.java rename to app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentActivity.java index fed34c9..f8eb197 100644 --- a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/EmailsActivity.java +++ b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentActivity.java @@ -9,23 +9,23 @@ import java.util.ArrayList; import java.util.List; -public class EmailsActivity extends AppCompatActivity { +public class StudentActivity extends AppCompatActivity { - private List emails; + private List students; - private RecyclerView recyclerViewEmails; + private RecyclerView recyclerView; private RecyclerView.LayoutManager layoutManager; - private EmailAdapter emailAdapter; + private StudentAdapter studentAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_emails); + setContentView(R.layout.activity_students); // data source for our RecyclerView - populateListOfEmails(); + populateListOfStudents(); - // init the ui elements + // init the UI elements initView(); // set the linear layout manager to our recycler view @@ -36,28 +36,25 @@ protected void onCreate(Bundle savedInstanceState) { } private void initView() { - recyclerViewEmails = findViewById(R.id.recyclerViewEmails); + recyclerView = findViewById(R.id.recyclerViewStudents); } - private void populateListOfEmails() { - emails = new ArrayList<>(); - Mail newEmail = new Mail(1, "Magda", "Curs Android"); - emails.add(newEmail); + private void populateListOfStudents() { + students = new ArrayList<>(); int index; - for (int i = 1; i < 20; i++) { + for (int i = 0; i < 20; i++) { index = i + 1; - newEmail = new Mail(index, "Sender " + index, "Subject " + index); - emails.add(newEmail); + students.add(new Student(index, "FirstName " + index, "LastName " + index)); } } private void setLayoutManager() { layoutManager = new LinearLayoutManager(this); - recyclerViewEmails.setLayoutManager(layoutManager); + recyclerView.setLayoutManager(layoutManager); } private void setAdapter() { - emailAdapter = new EmailAdapter(emails); - recyclerViewEmails.setAdapter(emailAdapter); + studentAdapter = new StudentAdapter(students); + recyclerView.setAdapter(studentAdapter); } } \ No newline at end of file diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentAdapter.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentAdapter.java new file mode 100644 index 0000000..391477c --- /dev/null +++ b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentAdapter.java @@ -0,0 +1,43 @@ +package com.magdamiu.androidfundamentalsmai2021; + +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +public class StudentAdapter extends RecyclerView.Adapter { + private final List students; + + public StudentAdapter(List students) { + this.students = students; + } + + @NonNull + @Override + public StudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.student_item, parent, false); + return new StudentViewHolder(itemView); + } + + // fills the item with the corresponding element from the list (data source) + @Override + public void onBindViewHolder(@NonNull StudentViewHolder holder, int position) { + Student currentStudent = students.get(position); + if (position % 2 == 1){ + holder.getStudentView().setBackgroundColor(Color.argb(125, 204, 204, 204)); + } + holder.getTextFirstName().setText(currentStudent.getFirstName()); + holder.getTextLastName().setText(currentStudent.getLastName()); + } + + // decides how many items(total number) to create in our recycler view + @Override + public int getItemCount() { + return students.size(); + } +} diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentViewHolder.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentViewHolder.java new file mode 100644 index 0000000..9535dce --- /dev/null +++ b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentViewHolder.java @@ -0,0 +1,36 @@ +package com.magdamiu.androidfundamentalsmai2021; + +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +// the class associated to the item of the recycler view +// each ui element from the item should have a dedicated field in this class +public class StudentViewHolder extends RecyclerView.ViewHolder { + final private LinearLayout studentView; + final private TextView textFirstName; + final private TextView textLastName; + + public StudentViewHolder(@NonNull View itemView) { + super(itemView); + studentView = itemView.findViewById(R.id.student); + textFirstName = itemView.findViewById(R.id.textFirstName); + textLastName = itemView.findViewById(R.id.textLastName); + } + + + public TextView getTextFirstName() { + return textFirstName; + } + + public TextView getTextLastName() { + return textLastName; + } + + public LinearLayout getStudentView() { + return studentView; + } +} diff --git a/app/src/main/res/layout/activity_emails.xml b/app/src/main/res/layout/activity_students.xml similarity index 84% rename from app/src/main/res/layout/activity_emails.xml rename to app/src/main/res/layout/activity_students.xml index 832ed26..29ad936 100644 --- a/app/src/main/res/layout/activity_emails.xml +++ b/app/src/main/res/layout/activity_students.xml @@ -4,10 +4,10 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".EmailsActivity"> + tools:context=".StudentActivity"> diff --git a/app/src/main/res/layout/email_item.xml b/app/src/main/res/layout/student_item.xml similarity index 70% rename from app/src/main/res/layout/email_item.xml rename to app/src/main/res/layout/student_item.xml index 779702e..00f95a8 100644 --- a/app/src/main/res/layout/email_item.xml +++ b/app/src/main/res/layout/student_item.xml @@ -1,19 +1,19 @@ + android:layout_height="wrap_content" /> \ 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 b363a5c..72646d9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - Curs Android Fundamentals + Students Hello World from Android! This is my first TextView I am a button From affe98af4c23c2fd252cd7c95c18a20a0f1ccb67 Mon Sep 17 00:00:00 2001 From: Madalin Date: Tue, 6 Jul 2021 16:03:41 +0300 Subject: [PATCH 2/3] Change AndroidManifest.xml for running just the StudentActivity and solving the challenge correctly. --- app/src/main/AndroidManifest.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 40ca0af..6a9fb71 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,10 +11,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.AndroidFundamentalsMai2021"> - - - - + From ce8c609329419f1960f130ccf5d1a8bb382c5295 Mon Sep 17 00:00:00 2001 From: Madalin Date: Tue, 27 Jul 2021 18:29:22 +0300 Subject: [PATCH 3/3] Use the grey color from colors.xml. --- .../androidfundamentalsmai2021/StudentActivity.java | 8 +++++++- .../androidfundamentalsmai2021/StudentAdapter.java | 5 +++-- app/src/main/res/values/colors.xml | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentActivity.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentActivity.java index f8eb197..253ead4 100644 --- a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentActivity.java +++ b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentActivity.java @@ -4,6 +4,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import android.content.Context; import android.os.Bundle; import java.util.ArrayList; @@ -12,7 +13,7 @@ public class StudentActivity extends AppCompatActivity { private List students; - + private static Context context; private RecyclerView recyclerView; private RecyclerView.LayoutManager layoutManager; private StudentAdapter studentAdapter; @@ -20,6 +21,7 @@ public class StudentActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + StudentActivity.context = getApplicationContext(); setContentView(R.layout.activity_students); // data source for our RecyclerView @@ -57,4 +59,8 @@ private void setAdapter() { studentAdapter = new StudentAdapter(students); recyclerView.setAdapter(studentAdapter); } + + public static Context getAppContext() { + return StudentActivity.context; + } } \ No newline at end of file diff --git a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentAdapter.java b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentAdapter.java index 391477c..90e0ceb 100644 --- a/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentAdapter.java +++ b/app/src/main/java/com/magdamiu/androidfundamentalsmai2021/StudentAdapter.java @@ -1,11 +1,12 @@ package com.magdamiu.androidfundamentalsmai2021; -import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; import androidx.recyclerview.widget.RecyclerView; import java.util.List; @@ -29,7 +30,7 @@ public StudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int view public void onBindViewHolder(@NonNull StudentViewHolder holder, int position) { Student currentStudent = students.get(position); if (position % 2 == 1){ - holder.getStudentView().setBackgroundColor(Color.argb(125, 204, 204, 204)); + holder.getStudentView().setBackgroundColor(ContextCompat.getColor(StudentActivity.getAppContext(), R.color.grey)); } holder.getTextFirstName().setText(currentStudent.getFirstName()); holder.getTextLastName().setText(currentStudent.getLastName()); diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d8ce349..0817aa5 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -8,4 +8,5 @@ #FF000000 #FFFFFFFF #ff3412 + #CCCCCC \ No newline at end of file