简体   繁体   中英

Switching from MainActivity (start screen) to Play screen activity. Intent Crashing Application

So I have been searching around constantly on how to fix this application. But what I do not seem to understand as to Why it is crashing. My code is the same to all those other questions asked about the same issue, and it still does not seem to be working. Here is a copy of my Start screen.class file:

package org.concordacademy.hangman;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends Activity {

    private final String MA = "Main Activity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(MA, "Loading Title Screen.");
    }

    // This Below Starts the Intent Push to the "Play Screen"

    public void playGame(View v) {
        Log.i(MA, "Starting Game");
        Intent pushToPlayScreen = new Intent(MainActivity.this, PlayScreen.class);
        startActivity(pushToPlayScreen);

    }

    @Override
    public void onStart() {
        super.onStart();
        Log.i(MA, "onStart");

    }

    @Override
    public void onResume() {
        super.onResume();
        Log.i(MA, "onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.i(MA, "onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.i(MA, "onStop");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(MA, "onDestroy");
    }

}

Here is my Playscreen.class file:

package org.concordacademy.hangman;


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class PlayScreen extends Activity {

    // The String Below will tell Console/LogCat the processes of The PlayScreen Activity

    private final String PS = "Play Screen";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_playscreen);
        Log.i(PS, "Loading Play Screen.");
    }

    // Read Text File entitled wordsEn.txt 
        public String readFromFile() {
            String words = "";
            // Array List That Words being added to
            ArrayList<String> wordLineArray = new ArrayList<String>();

            try { 
                InputStream inputstream = openFileInput("wordsEn.txt");
                if (inputstream != null) {
                    InputStreamReader inputStreamReader = new InputStreamReader(inputstream);
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                    String receiveString = "";
                    StringBuilder stringBuilder = new StringBuilder();

                    while ( (receiveString = bufferedReader.readLine()) != null ) {
                        wordLineArray.add(receiveString);
                        stringBuilder.append(receiveString);
                    }
                    inputstream.close();
                    words = stringBuilder.toString();
                }

            }
            catch (FileNotFoundException e) {
                Log.e("login activity", "File not found: " + e.toString());
            } catch (IOException e) {
                Log.e("login activity", "Can not read file: " + e.toString());
            }

            return words;
        }

}

Here is my Manifest file:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.concordacademy.hangman"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_hangmanicon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" 
        android:debuggable="true">
        <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=".PlayScreen" >
        </activity>
    </application>

</manifest>

Here is my MainActivity Layout.XML File:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:gravity="center_horizontal"
        android:text="@string/title"
        android:textSize="50sp" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="250dp"
        android:text="@string/ButtonTitle"
        android:onClick="playGame" />

</LinearLayout>

Here is my Playscreen Layout.XML file:

<?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" >

    <fragment
        android:id="@+id/fragment1"
        android:name="org.concordacademy.hangman.GallowsFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Gallows Fragment (Added by partner) Class Code.

package org.concordacademy.hangman;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class GallowsFragment extends Fragment {

    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.activity_gallows, container, false);
        return view;

    }

}

Stack Trace (LogCat, Fatal Exception Error)

03-01 11:11:04.921: E/AndroidRuntime(562): FATAL EXCEPTION: main
03-01 11:11:04.921: E/AndroidRuntime(562): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.concordacademy.hangman/org.concordacademy.hangman.PlayScreen}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2129)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2154)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.ActivityThread.access$700(ActivityThread.java:146)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1260)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.os.Looper.loop(Looper.java:137)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.ActivityThread.main(ActivityThread.java:4949)
03-01 11:11:04.921: E/AndroidRuntime(562):  at java.lang.reflect.Method.invokeNative(Native Method)
03-01 11:11:04.921: E/AndroidRuntime(562):  at java.lang.reflect.Method.invoke(Method.java:511)
03-01 11:11:04.921: E/AndroidRuntime(562):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1043)
03-01 11:11:04.921: E/AndroidRuntime(562):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
03-01 11:11:04.921: E/AndroidRuntime(562):  at dalvik.system.NativeStart.main(Native Method)
03-01 11:11:04.921: E/AndroidRuntime(562): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
03-01 11:11:04.921: E/AndroidRuntime(562):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:318)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.Activity.setContentView(Activity.java:1920)
03-01 11:11:04.921: E/AndroidRuntime(562):  at org.concordacademy.hangman.PlayScreen.onCreate(PlayScreen.java:24)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.Activity.performCreate(Activity.java:5185)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2093)
03-01 11:11:04.921: E/AndroidRuntime(562):  ... 11 more
03-01 11:11:04.921: E/AndroidRuntime(562): Caused by: java.lang.ClassCastException: org.concordacademy.hangman.GallowsFragment cannot be cast to android.app.Fragment
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.Fragment.instantiate(Fragment.java:577)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.Fragment.instantiate(Fragment.java:552)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.app.Activity.onCreateView(Activity.java:4828)
03-01 11:11:04.921: E/AndroidRuntime(562):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686)
03-01 11:11:04.921: E/AndroidRuntime(562):  ... 21 more

Please Please please respond if you know how to fix it. I have a project due next week and its bad enough if this intent is not working.

You extend Activity . If you intend to use Fragment from Support Library you will have to extend FragmentActivity which is the base class for all support based fragments. ( for api level below 11)

Replace

import android.support.v4.app.Fragment;

By this

import android.app.Fragment

Note :

Your min sdk is 16 in manifest so there is no need to extend FragmentActivity and use support based fragments.

There's a problem with Fragment import. GallowsFragment is defined as a SupportFragment, while in XML it's defined as a Fragment. In particular you need to edit your import:

import android.support.v4.app.Fragment;

should be:

import android.app.Fragment;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM