I am using Android Studio 2.3 Testing Device (Tecno-Tecno-6.0 Marshallow).
I am new to android apps development.. I have 3 Activity (MainActivity, DisplayMessageActivity and ReadMessageActivity).screens.
I can navigate back and forth from the MainActivity, which is the parentActivity to the DisplayMessageActivity, which is the child activity, and from DisplayMessageActivity to the ReadMessageActivity.
But I cannot navigate back from ReadMessageActivity to the DisplayMessageActivity. When I do this, the application crashes with error "Unfortunately, AppName has Stopped."
This app works fine...except that the 3rd activity crashes the app when going back to the 2nd activity.
Please see the AndroidManifest.xml and the different Activity.xml codes below and help me in this challenge. Thank you in advance.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DisplayMessageActivity"
android:parentActivityName=".MainActivity"
android:label="@string/welcome_screen_title"
android:finishOnTaskLaunch="true"
android:launchMode="standard">
<!-- The meta-data tag is required if you support API level 15 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity android:name=".ReadMessageActivity"
android:parentActivityName=".DisplayMessageActivity"
android:label="@string/question_screen"
android:allowTaskReparenting="true">
<!-- The meta-data tag is required if you support API level 15 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".DisplayMessageActivity" />
</activity>
</application>
MainActivity.xml
package com.example.examinationportal;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
String message = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/** Called when the user taps the Send button */
public void loginUser(View login) {
Intent intent = new Intent(this, DisplayWelcomeScreen.class);//start the ui
//initialize the status bar textview control
TextView statusBar = (TextView) findViewById(R.id.textViewStatusMsg);
//initialize textViewLogin
TextView titleLogin = (TextView) findViewById(R.id.textViewLogin) ;
titleLogin.setTextColor(0x01060013);//colors
EditText un = (EditText) findViewById(R.id.editTextUsername);//username field
EditText pw = (EditText) findViewById(R.id.editTextPassword);//password field
String username = un.getText().toString();//convert username and password to string and parse
String password = pw.getText().toString();//them to variables
//check the login
if(username.equals("admin") && password.equals("admin")){//compare the username and password entered by user with the defaul
message = "Welcome"; //message for successful login
String msg = "Login Successful!";//this message will be displayed on the status bar
statusBar.setTextColor(Color.parseColor("#ff0000"));
statusBar.setBackgroundColor(Color.parseColor("#d3d3d3"));
statusBar.setText(msg);//disp the msg for unsuccessful login
Bundle bundle = new Bundle();//bundle the message and parse it to the next activity
bundle.putString("dispMsg", message);//bundle the message using the variable dispMsg
intent.putExtras(bundle);
startActivity(intent);
}else{
message = "Invalid Login! You are not authorised to view this page...";
//statusBar.setText(null);//status bar textview
//statusBar.setTextColor(getResources().getColor(R.color.colorAccent));
//statusBar.setTextColor(ContextCompat.getColor(context, R.color.colorAccent));
statusBar.setTextColor(Color.parseColor("#ff0000"));
statusBar.setBackgroundColor(Color.parseColor("#d3d3d3"));
statusBar.setText(message);//disp the msg for unsuccessful login
}
}
}
DisplayMessageActivity.xml
package com.example.examinationportal;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class DisplayWelcomeScreen extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_welcome_screen);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
Bundle bundle = getIntent().getExtras();
String showMsg = bundle.getString("dispMsg");
// Capture the layout's TextView and set the string as its text
TextView textView = (TextView) findViewById(R.id.textViewWelcome);
textView.setText(showMsg);
//disable some controls when user is not logged in
View buttonCSS342 = findViewById(R.id.buttonCSS342);
View buttonCSS352 = findViewById(R.id.buttonCSS352);
View buttonCSS354 = findViewById(R.id.buttonCSS354);
View buttonCSS356 = findViewById(R.id.buttonCSS356);
View buttonCSS381 = findViewById(R.id.buttonCSS381);
View buttonPCR362 = findViewById(R.id.buttonPCR362);
}
public void courseClicked(View v) {
String course = "";
Intent intent = new Intent(this, CSS_342_Questions.class);
int qNum = 0;
switch (v.getId()){
case R.id.buttonCSS342:
course = "CSS 342";
qNum=1;
break;
case R.id.buttonCSS352:
course = "CSS 352";
qNum=1;
break;
case R.id.buttonCSS354:
course = "CSS 354";
qNum=1;
break;
case R.id.buttonCSS356:
course = "CSS 356";
qNum=1;
break;
case R.id.buttonCSS381:
course = "CSS 381";
qNum=1;
break;
case R.id.buttonPCR362:
course = "PCR 362";
qNum=1;
break;
}
Bundle bundle = new Bundle();
bundle.putString("dispCode", course);
bundle.putInt("qNum", qNum);
intent.putExtras(bundle);
startActivity(intent);
}
}
ReadMessageActivity.xml
package com.example.examinationportal;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
public class CSS_342_Questions extends AppCompatActivity {
public int qNum = 0;
public String showCode ="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_css_342__questions);
// Get the Intent that started this activity and extract the string
Intent intent = getIntent();
Bundle bundle = getIntent().getExtras();
showCode = bundle.getString("dispCode");
qNum = bundle.getInt("qNum");
TextView textView = (TextView) findViewById(R.id.textViewCourseTitle);
TextView qn = (TextView)findViewById(R.id.textViewQn);
TextView q = (TextView)findViewById(R.id.textViewQ);
WebView ans = (WebView) findViewById(R.id.textViewAns);
ans.getSettings().setLoadsImagesAutomatically(true);
ans.getSettings().setJavaScriptEnabled(true);
ans.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
ans.getSettings().setBuiltInZoomControls(true);
View buttonPrev = findViewById(R.id.buttonPrevious);
View buttonNext = findViewById(R.id.buttonNext);
if(showCode.equals("CSS 342") && qNum == 1) {
String showTitle = "Safety Management and Loss Prevention";
textView.setText(showTitle);// Capture the layout's TextView and set the string as its text
qn.setText(Questions.css342_q1[0]);
q.setText(Questions.css342_q1[1]);
ans.loadUrl("file:///android_asset/css342_q1.html");
buttonPrev.setVisibility( View.INVISIBLE);
qNum = 1;
}else if(showCode.equals("CSS 352") && qNum == 1){
String showTitle = "Crime and Crime Theories";
// Capture the layout's TextView and set the string as its text
textView.setText(showTitle);
qn.setText(Questions.css352_q1[0]);
q.setText(Questions.css352_q1[1]);
ans.loadUrl("file:///android_asset/css352_q1.html");
buttonPrev.setVisibility(View.INVISIBLE);
qNum = 1;
}
}
}