"The authoritative Guide to Android Programming"-Reading notes
-geoquiz Feature Extensions
From now on, the book began to expand its application. In this extension, we will learn the following points of knowledge:
- Create a new class
- Update the View layer
- Update the control layer
- Modification and submission of GIT code
- Android Studio runs the app on your device
- Add a picture resource to a button
Function: Is the Geoquiz Application object plot. The applied objects are divided into three parts by model, controller, and view categories. Android apps are designed to give model-controller-view (Model-view-controller, MVC) architectural patterns.
Create a class TrueFalse
This class defines 2 variables mquestion, mtruequestion.
Mquestion the resource ID used to hold the geography knowledge issue for payment wear.
Mtruequestion is used to determine whether the answer is correct.
Right-->new The class name is TrueFalse.
private int mquestion;
Private Boolean mtruequestion;
Add 2 private variables
Use the Fast key alt+insert to activate the select constructor and Getter and Setter.
git operation:
$git Add.
$git commit–m "Add a new class"
$git Push Geoquiz Master
You can view the code after submission
http://git.oschina.net/canglin/GeoQuiz/commit/eea5ae599c3830daaf49eb6ac380b49a2fc07193
Update the View layer
Modify Activity_quiz.xml
Add an ID of @+id/question_text_view to TextView and add a button ID of @+id/next_button.
Update string resource definition (strings.xml)
Add a String
<string name= "Next_button" >Next</string>
Update the control layer
First to affirm
Private Button Mnextbutton;
Private TextView Mquestiontextview;
The new button variable and the problem display space TextView, and then create an array of TrueFalse objects, because is an example program, so directly to him to create data.
Private truefalse[] Mquestionbank = new truefalse[]
{
New TrueFalse (R.string.question_oceans,true),
New TrueFalse (R.string.question_mideast,false),
New TrueFalse (R.string.question_africa,false),
New TrueFalse (R.string.question_americas,true),
New TrueFalse (R.string.question_asia,true),
};
This data is created in the quizactivity, which is the control layer, which is not an optimal behavior in the real program.
Initializes the first question, in OnCreate ()
Mquestiontextview = (TextView) Findviewbyid (R.id.question_text_view);
int question = Mquestionbank[mcurrentindex].getquestion ();
Mquestiontextview.settext (question);
This code first obtains the TextView reference, and then through SetText (resource ID), displays the problem. The resource ID is of type int.
Add Nextbutton
Mnextbutton = (Button) Findviewbyid (R.id.next_button);
Mnextbutton.setonclicklistener (New View.onclicklistener () {
@Override
public void OnClick (View v) {
Mcurrentindex = (mcurrentindex+1)% Mquestionbank.length;
int question = Mquestionbank[mcurrentindex].getquestion ();
Mquestiontextview.settext (question);
}
});
This code first gets the Nextbutton reference, then binds it to the click event, changes the problem once per click, and then gets the resource ID of the new problem, which refreshes the problem by SetText (resource ID).
Here the function has been able to do every click Next will change a problem, the effect is as follows:
After clicking Next:
We submit the code once, this time the code modifies the resource file, modifies the interface and modifies the interaction code.
GIT operates as follows:
Right-click Git Bush under the working directory
$git status
$git Add.
$git status
First commit the changes
$git commit–m "Add a new Button,adds several new Issues,adds a new button event"
Then submit to Git.oschina.net
$git Push Geoquiz Master
The code is modified as follows
http://git.oschina.net/canglin/GeoQuiz/commit/6be7ee83e2a92f11fd3e4c73072c0e2ef191b162
Refactoring of code
The code that updates the Mquestiontextview variable is distributed in different places. The book guides us through the first simple refactoring, which puts the bow code of the processing in a separate private method.
private void Updatequestion () {
int question = Mquestionbank[mcurrentindex].getquestion ();
Mquestiontextview.settext (question);
}
Add a private method updatequestion and then replace the duplicated place.
git operations
$git status
$git Add.
$git commit–m "Refactoring Code"
$git Push Geoquiz Master
After refactoring the code is as follows:
http://git.oschina.net/canglin/GeoQuiz/commit/0fcfdcf2fa5e699ebf2e145ed9d468c3f9d28599
Verifying the correctness of the problem
Create a Private method Checkanswer ()
private void Checkanswer (Boolean userpresedtrue) {
Boolean answeristrue = Mquestionbank[mcurrentindex].istruequestion ();
int messageresid = 0;
if (userpresedtrue = = answeristrue) {
Messageresid = R.string.correct_toast;
} else {
Messageresid = R.string.incorrect_toast;
}
Toast.maketext (This,messageresid,toast.length_short). Show ();
}
Replace the event code inside the True_button,false_button with this method. The code is as follows:
http://git.oschina.net/canglin/GeoQuiz/commit/03989c691e966b1b5d79975993ed114722cb1365
After implementing this feature, if an incorrect answer is selected, you will be prompted to Incorect. As shown in the following:
Android Studio runs the app on your device
Click Run->edit configurations ...
Check the USB device in target device (the default is Show Chooser Diaglog).
Click OK. Then Run->run ' app '
Add a picture resource to a button
Look for a picture arrow_right.png modify Next button's code as follows:
<button
Android:id= "@+id/next_button"
Android:layout_width= "Wrap_content"
android:layout_height= "Wrap_content"
android:text= "@string/next_button"
android:drawableright= "@drawable/arrow_right"/>
The display results are as follows:
Committing code in Git
http://git.oschina.net/canglin/GeoQuiz/commit/eea0734423d7c2bee60d74430b0a26904a3ce61c
"The authoritative guide for Android Programming"-Reading Notes (iv)-geoquiz function extension