Application Programming Hend Alkittawi Android Development Building a Multi-screen App ROWDY QUIZ APP - We created the Rowdy Quiz app to read questions from a data file and display them to the user. - We also added a logo to our screen ROWDY QUIZ APP - We will modify the app to allow the user to peek at the answer BUILDING A MULTI-SCREEN APP - To add a new screen to an Android app 1. create a new activity and a new layout using the new activity wizard - Right click on app > New > Activity > Empty Views Activity - this will create a new layout file and update the AndroidManifest.xml file - the manifest is an xml file that contains metadata that describes your application to the Android OS - every activity in an application must be declared in the manifest so that the OS can access it 2. add code to start the new activity CREATING A NEW ACTIVITY CREATING A NEW ACTIVITY - Create a new activity and a new layout using the new activity wizard - The layout for the new screen has - LinearLayout - ImageView - TextView - TextView - Button STARTING A NEW ACTIVITY - The simplest way to start another activity is with the startActivity() method Intent intent = new Intent(currentActivity, newActivity.class); startActivity(intent) - For our app, MainActivity will start the PeekActivity in response to a click on the Peek button - Add the following method to MainActivity.java and call it as appropriate! private void launchActivity() { MainActivity Intent intent = new Intent(this, PeekActivity.class); } startActivity(intent); PeekActivity STARTING A NEW ACTIVITY - Sometimes it is necessary to pass data between the starting activity (parent) and the started activity (child). - When starting an activity, the starting (parent) activity can add an extra to the intent with the putExtra() method - extras are arbitrary data that the calling activity can include with an intent - an extra is a structured key-value pair Intent intent = new Intent(currentActivity, newActivity.class); intent.putExtra(name, value); startActivity(intent) STARTING A NEW ACTIVITY - Sometimes it is necessary to pass data between the starting activity (parent) and the started activity (child) - to retrieve the extra from the intent use the get[type]Extra() method value = getIntent().get[type]Extra(name, default_val); - available methods - getBooleanExtra() - getCharExtra() - getIntExtra() - getStringExtra() … etc. STARTING A NEW ACTIVITY - For our app, MainActivity should pass the answer of the current question to the PeekActivity so that the answer is displayed to the user when the Show Answer button in is clicked // some code is omitted .. new code is highlighted here // refer to full code on Github // some code is omitted // refer to full code on Github public class MainActivity extends AppCompatActivity { public class PeekActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_peek); private static final String intentKey = "answer"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.show_answer_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String answer = getIntent().getStringExtra(MainActivity.decodeIntent()); Button peekButton = findViewById(R.id.peek_button); peekButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { launchActivity(); } }); getIntent().getStringExtra(“answer”); TextView answerTextView = findViewById(R.id.shown_answer); answerTextView.setText(answer); } private void launchActivity() { Intent intent = new Intent(this, PeekActivity.class); intent.putExtra(intentKey, String.valueOf(getAnswer())); startActivity(intent); } public static String decodeIntent(){ return intentKey; } } } }); } } BUILDING A MULTI-SCREEN APP - Rowdy Quiz Sequence Diagram RowdyQuiz Android OS ActivityManager MainActivity User presses Peek button, onClick() called Intent startActivity(Intent) component: PeekActivity extra = answer nt) (inte PeekActivity User presses back button DO YOU HAVE ANY QUESTIONS? THANK YOU! @ hend.alkittawi@utsa.edu By Appointment Online