Question

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:

enter image description here

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>
Was it helpful?

Solution

Add ImageView:

<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"/>

<ImageView
        android:id="@+id/imgResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:content_decription="@null"
        android:src="@drawable/ic_incorrect" 
        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"/>

getView() in adapter:

@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);
        ImageView imgResult = (ImageView) row.findViewById(R.id.imgResult);
        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);
            imgResult.setImageResource(R.drawable.ic_incorrect);
        }
        else{
            answerTxtView.setTextColor(Color.GREEN);
            correctAnswerTxtView.setVisibility(View.GONE);
            imgResult.setImageResource(R.drawable.ic_correct);
        }
        return row; 
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top