根据用户输入在ListView中将项添加到Item的末尾

时间:2014-04-30 13:47:21

标签: android xml listview adapter

在我的应用程序(乘法游戏)中,我有一个动作,显示用户对问题的回答。 如果给定的答案是正确的,则显示为绿色。如果答案错误,则显示为红色,正确答案在子项目中显示为绿色。

我希望能够添加" x"如果错误则在答案后面的符​​号,如果是正确的则为刻度符号。 (在项目中)

目前的活动图片:

enter image description here

活动代码:

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);
    }

}

适配器代码:

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; 
    }
}

两个相应的XML:

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>

1 个答案:

答案 0 :(得分:0)

添加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():

@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; 
    }