In my App (multiplication game) I have an actvity that displays the user's answers to questions.
If the given answer is correct it is shown in green. If the answer is wrong it is shown in red and the correct answer is shown in green in the sub-item.
I want to be able to add an "x" symbol after the answer if it is wrong and a tick symbol if it is correct. (in the item)
Image of activity as it is currently:
Code from activity:
public class RandomTestResults extends Activity {
// Set up variables
TextView scoreText;
String phrase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testresults);
// List view to hold the test results
ListView itemList = (ListView) findViewById(R.id.lvRandomTestresults);
// getting data from the previous activity via intents
int[] results = getIntent().getIntArrayExtra("results");
String[] questions = getIntent().getStringArrayExtra("Questions");
int[] correctAnswer = getIntent().getIntArrayExtra("CorrectAnswer");
int score = getIntent().getIntExtra("score", 0);
// if else statements to determine what phrase to present to user
if (score <= 4) {
phrase = "Please try again! ";
} else if (score <= 6) {
phrase = "Good effort! ";
} else if (score <= 9) {
phrase = "Well done! ";
} else if (score == 10) {
phrase = "Perfect! ";
}
// Set text to tell user what they scored in test
scoreText = (TextView) findViewById(R.id.tvRandomTestresults);
scoreText.setText(phrase + "You got " + score + " correct out of 10!");
// ArrayList containing Hashmap
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
// loop to give list view (10 items and sub items)
for (int i = 1; i <= 10; i++) {
// set userAnswer equal to correct place in results array
int userAnswer = results[i - 1];
// Setting expected answer to correct place in correctAnswer array
int expectedAnswer = correctAnswer[i - 1];
// Set string to present to user
String userString = questions[i - 1] + " " + userAnswer; // mybe
// change
// correct answer
String expectedString = "" + expectedAnswer;
// HashMap containing 2 strings
HashMap<String, String> map = new HashMap<String, String>();
// add strings to HashMap
map.put("user", userString);
map.put("expected", expectedString);
// add HashMap to list
list.add(map);
}
// Instantiate custom array adapter
MyArrayAdapter adapter = new MyArrayAdapter(
this.getApplicationContext(), R.layout.list_row, list,
questions, results);
// Set custom adapter to your ListView.
itemList.setAdapter(adapter);
}
/**
* Method that ensures user is returned
* to main menu when they press back button
*/
@Override
public void onBackPressed() {
Intent t = new Intent(this, Menu.class);
startActivity(t);
}
}
Code from Adapter:
public class MyArrayAdapter extends
ArrayAdapter<ArrayList<HashMap<String, String>>> {
Context mContext;
ArrayList<HashMap<String, String>> mQuestionArrayList;
int mLayoutResourceId;
String[] mQuestionsArray;
int[] mUsersAnswers;
/**
* Constructor with arguments
* @param context
* @param layoutResourceId
* @param questionsArrayList
* @param questionsArray
* @param usersAnswers
*/
public MyArrayAdapter(Context context, int layoutResourceId,
ArrayList<HashMap<String, String>> questionsArrayList,
String[] questionsArray, int[] usersAnswers) {
super(context, layoutResourceId);
mContext = context;
this.mQuestionArrayList = questionsArrayList;
this.mLayoutResourceId = layoutResourceId;
this.mQuestionsArray = questionsArray;
this.mUsersAnswers = usersAnswers;
}
/**
* Method that returns the size
* of the ArrayList
*/
@Override
public int getCount() {
return mQuestionArrayList.size();
}
/**
*
* Method that will get the view to display to user
*/
@Override
public View getView(int position, View row, ViewGroup parent) {
HashMap<String, String> question = mQuestionArrayList.get(position);
//set layout inflater equal to context
LayoutInflater inflater = LayoutInflater.from(mContext);
// Initialize the row layout by inflating the xml file list_row.
row = inflater.inflate(this.mLayoutResourceId, parent, false);
// Initialize TextViews defined in the list_row layout.
TextView questionTxtView = (TextView) row.findViewById(R.id.question);
TextView answerTxtView = (TextView) row.findViewById(R.id.answer);
TextView correctAnswerTxtView = (TextView) row
.findViewById(R.id.correct);
// Set text for each TextView
questionTxtView.setText(mQuestionsArray[position]);
answerTxtView.setText(String.valueOf(mUsersAnswers[position]));
correctAnswerTxtView.setText(question.get("expected").toString());
// Setting colour of the user answer dependent on if its correct
if (mUsersAnswers[position] != Integer.parseInt(question
.get("expected").toString())){
answerTxtView.setTextColor(Color.RED);
correctAnswerTxtView.setVisibility(View.VISIBLE);
}
else{
answerTxtView.setTextColor(Color.GREEN);
correctAnswerTxtView.setVisibility(View.GONE);
}
return row;
}
}
Two Corresponding XML's:
TestResults:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvRandomTestresults"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<ListView
android:id="@+id/lvRandomTestresults"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
List_Row:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/list_row.xml"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/questionLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/question"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:paddingLeft="10dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"/>
<TextView
android:id="@+id/answer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:paddingLeft="10dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"/>
</LinearLayout>
<TextView
android:id="@+id/correct"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#00FF00"
android:paddingLeft="10dp"
android:paddingTop="2dp"
android:paddingBottom="2dp"/>
</LinearLayout>