Skip to content

Commit 4101cb7

Browse files
author
Gear61
committed
Refactor homepage to RecyclerView
1 parent b7d35a5 commit 4101cb7

File tree

5 files changed

+48
-39
lines changed

5 files changed

+48
-39
lines changed

app/src/main/java/randomappsinc/com/sqlpractice/activities/MainActivity.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import android.net.Uri;
55
import android.os.Bundle;
66
import android.support.annotation.NonNull;
7+
import android.support.v7.widget.RecyclerView;
78
import android.view.Menu;
89
import android.view.MenuItem;
9-
import android.widget.ListView;
1010

1111
import com.afollestad.materialdialogs.DialogAction;
1212
import com.afollestad.materialdialogs.MaterialDialog;
@@ -15,7 +15,6 @@
1515
import butterknife.BindString;
1616
import butterknife.BindView;
1717
import butterknife.ButterKnife;
18-
import butterknife.OnItemClick;
1918
import randomappsinc.com.sqlpractice.R;
2019
import randomappsinc.com.sqlpractice.adapters.QuestionsAdapter;
2120
import randomappsinc.com.sqlpractice.database.DataSource;
@@ -25,9 +24,10 @@
2524
import randomappsinc.com.sqlpractice.utils.ToastUtils;
2625
import randomappsinc.com.sqlpractice.utils.Utils;
2726

28-
public class MainActivity extends StandardActivity implements LibraryDialog.Listener {
27+
public class MainActivity extends StandardActivity
28+
implements LibraryDialog.Listener, QuestionsAdapter.Listener {
2929

30-
@BindView(R.id.question_list) ListView questionList;
30+
@BindView(R.id.question_list) RecyclerView questionList;
3131
@BindString(R.string.question_number) String questionTemplate;
3232

3333
private QuestionsAdapter questionsAdapter;
@@ -51,7 +51,7 @@ protected void onCreate(Bundle savedInstanceState) {
5151
DataSource dataSource = new DataSource(this);
5252
dataSource.refreshTables();
5353

54-
questionsAdapter = new QuestionsAdapter(this, questionTemplate);
54+
questionsAdapter = new QuestionsAdapter(this, questionTemplate, this);
5555
questionList.setAdapter(questionsAdapter);
5656

5757
if (preferencesManager.shouldAskToRate()) {
@@ -81,8 +81,8 @@ public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which)
8181
.show();
8282
}
8383

84-
@OnItemClick(R.id.question_list)
85-
public void onItemClick(int position) {
84+
@Override
85+
public void onQuestionClicked(int position) {
8686
Intent intent = new Intent(this, QuestionActivity.class);
8787
intent.putExtra(Constants.QUESTION_NUMBER_KEY, position);
8888
startActivity(intent);
Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
11
package randomappsinc.com.sqlpractice.adapters;
22

33
import android.content.Context;
4+
import android.support.annotation.NonNull;
5+
import android.support.v7.widget.RecyclerView;
46
import android.view.LayoutInflater;
57
import android.view.View;
68
import android.view.ViewGroup;
7-
import android.widget.BaseAdapter;
89
import android.widget.TextView;
910

1011
import butterknife.BindColor;
1112
import butterknife.BindView;
1213
import butterknife.ButterKnife;
14+
import butterknife.OnClick;
1315
import randomappsinc.com.sqlpractice.R;
1416
import randomappsinc.com.sqlpractice.database.QuestionServer;
1517
import randomappsinc.com.sqlpractice.utils.PreferencesManager;
1618

17-
public class QuestionsAdapter extends BaseAdapter {
19+
public class QuestionsAdapter extends RecyclerView.Adapter<QuestionsAdapter.QuestionViewHolder> {
20+
21+
public interface Listener {
22+
void onQuestionClicked(int position);
23+
}
1824

1925
private String[] questionList = new String[QuestionServer.getNumQuestions()];
2026
private PreferencesManager preferencesManager;
27+
private Listener listener;
2128

22-
public QuestionsAdapter(Context context, String questionTemplate) {
29+
public QuestionsAdapter(Context context, String questionTemplate, Listener listener) {
2330
preferencesManager = new PreferencesManager(context);
2431
populateList(questionTemplate);
32+
this.listener = listener;
2533
}
2634

2735
// Fills in "Question 1, Question 2, etc..." list
@@ -31,19 +39,31 @@ private void populateList(String questionTemplate) {
3139
}
3240
}
3341

34-
public int getCount() {
35-
return questionList.length;
42+
public long getItemId(int position) {
43+
return position;
3644
}
3745

38-
public String getItem(int position) {
39-
return questionList[position];
46+
@NonNull
47+
@Override
48+
public QuestionViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
49+
View itemView = LayoutInflater.from(parent.getContext()).inflate(
50+
R.layout.question_list_item,
51+
parent,
52+
false);
53+
return new QuestionViewHolder(itemView);
4054
}
4155

42-
public long getItemId(int position) {
43-
return position;
56+
@Override
57+
public void onBindViewHolder(@NonNull QuestionViewHolder holder, int position) {
58+
holder.loadQuestion(position);
4459
}
4560

46-
class QuestionViewHolder {
61+
@Override
62+
public int getItemCount() {
63+
return questionList.length;
64+
}
65+
66+
class QuestionViewHolder extends RecyclerView.ViewHolder {
4767
@BindView(R.id.question_number) TextView questionNumber;
4868
@BindView(R.id.tagged_lessons) TextView taggedLessons;
4969
@BindView(R.id.completion_icon) TextView completionIcon;
@@ -52,6 +72,7 @@ class QuestionViewHolder {
5272
@BindColor(R.color.red) int red;
5373

5474
QuestionViewHolder(View view) {
75+
super(view);
5576
ButterKnife.bind(this, view);
5677
}
5778

@@ -63,27 +84,13 @@ void loadQuestion(int position) {
6384
completionIcon.setText(R.string.x_icon);
6485
completionIcon.setTextColor(red);
6586
}
66-
67-
questionNumber.setText(getItem(position));
87+
questionNumber.setText(questionList[position]);
6888
taggedLessons.setText(QuestionServer.getQuestionServer().getQuestion(position).getIdeasList());
6989
}
70-
}
7190

72-
public View getView(int position, View view, ViewGroup parent) {
73-
QuestionViewHolder holder;
74-
if (view == null) {
75-
LayoutInflater inflater = (LayoutInflater) parent.getContext()
76-
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
77-
if (inflater == null) {
78-
throw new RuntimeException("Unable to get a layout inflater to render questions");
79-
}
80-
view = inflater.inflate(R.layout.question_list_item, parent, false);
81-
holder = new QuestionViewHolder(view);
82-
view.setTag(holder);
83-
} else {
84-
holder = (QuestionViewHolder) view.getTag();
91+
@OnClick(R.id.parent)
92+
void onQuestionClicked() {
93+
listener.onQuestionClicked(getAdapterPosition());
8594
}
86-
holder.loadQuestion(position);
87-
return view;
8895
}
8996
}

app/src/main/java/randomappsinc/com/sqlpractice/utils/Utils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,4 @@ public static void loadMenuIcon(Menu menu, int itemId, Icon icon, Context contex
8787
.colorRes(R.color.white)
8888
.actionBarSize());
8989
}
90-
}
90+
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
<ListView
1+
<android.support.v7.widget.RecyclerView
22
xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
34
android:id="@+id/question_list"
4-
android:divider="@null"
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
77
android:paddingTop="4dp"
88
android:paddingBottom="4dp"
9-
android:clipToPadding="false"/>
9+
android:clipToPadding="false"
10+
app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>

app/src/main/res/layout/question_list_item.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:card_view="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
5+
android:id="@+id/parent"
56
android:background="@color/background_light_gray"
67
android:layout_width="match_parent"
78
android:layout_height="wrap_content"

0 commit comments

Comments
 (0)