Android:在活动之间导航

时间:2017-04-11 17:02:44

标签: android android-activity back-button android-navigation android-homebutton

我正在使用Android Studio 2.3 测试设备(Tecno-Tecno-6.0 Marshallow)。

我是Android应用程序开发的新手.. 我有3个Activity(MainActivity,DisplayMessageActivity和ReadMessageActivity).screens。

我可以从MainActivity来回导航,MainActivity是DisplayMessageActivity的parentActivity,它是子活动,从DisplayMessageActivity到ReadMessageActivity。

但我无法从ReadMessageActivity导航回DisplayMessageActivity。 当我这样做时,应用程序崩溃并出现错误" 不幸的是,AppName已停止。"

此应用程序正常运行...除了第3个活动在返回第2个活动时崩溃应用程序。

请参阅下面的AndroidManifest.xml和不同的Activity.xml代码,并帮助我解决这个挑战。 提前谢谢。

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

1 个答案:

答案 0 :(得分:0)

更新AndroidManifest.xml,如下所示:

.................
.........................

<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=".DisplayWelcomeScreen"
        android:label="@string/welcome_screen_title">

    </activity>

    <activity android:name=".CSS_342_Questions"
        android:label="@string/question_screen">

    </activity>
</application>

...............
.......................

CleanRun您的申请。希望它会起作用〜