当 运行 App Android Studio 时 Activity 不正确

Incorrect Activity when running App Android Studio

我已经开始在 Android studio 中构建应用程序。我已将 MainPage 设置为 manifest.xml 中的启动器 activity。

<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/Theme.AppCompat.NoActionBar">

    <activity android:name=".MainPage">
        android:screenOrientation="portrait"
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".courseSelect" />
    <activity android:name=".profile1" />
    <activity android:name=".stats1" />
    <activity android:name=".ReviewRounds" />
    <activity android:name=".ReferFriends" />
    <activity android:name=".RangeMode" />
</application>

我仔细检查了 运行 配置是否设置为 'Default',但该应用 运行 正在使用另一个 activity,名为 courseSelect .它也没有 运行 在 NumberPicker 上正确地设置一些代码。尽管我已将选择器设置为具有最小值、最大值和默认值,但选择器仅显示 0 并且不会滚动。这两个问题似乎在某种程度上是相关的,就 activity 是什么而言 运行。

这是courseSelect代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.NumberPicker;
import co.ceryle.segmentedbutton.SegmentedButtonGroup;

public class courseSelect extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_course_select);

        //Hole Picker
        NumberPicker holePicker = (NumberPicker)findViewById(R.id.holePicker);
        holePicker.setMaxValue(18);
        holePicker.setMinValue(1);
        holePicker.setWrapSelectorWheel(false);
        holePicker.setValue(1);

        SegmentedButtonGroup sbg = (SegmentedButtonGroup) findViewById(R.id.segmentedButtonGroup);
        sbg.setOnClickedButtonPosition(new SegmentedButtonGroup.OnClickedButtonPosition() {
            @Override
            public void onClickedButtonPosition(int position) {
                // if(position == 0)
            }
        });
    }
}

我尝试将 运行 配置专门设置为 MainPage activity,它仍然在 courseSelect 页面中打开。

编辑:根据要求,这是我的 MainPage.java 代码:

public class MainPage extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_course_select);

        Window g = getWindow();
        g.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.TYPE_STATUS_BAR);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
    ...
}

首先你的清单文件有误

你在开始标签外写了 screenOrientation 属性

 <activity android:name=".MainPage">
        android:screenOrientation="portrait"
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

应该是

<activity 
        android:name=".MainPage"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

你用错了xml setContenView

试试这个,错误出现在第 9 行,因为你的代码行在标签之外:

    <activity android:name=".MainPage">
       android:screenOrientation="portrait"  // error 

这样做:

    <activity android:name=".MainPage"
       android:screenOrientation="portrait">  // After doing this no error

也做这件事 :

  public class MainPage extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_course_select); // error

这样做:

public class MainPage extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.MAIN_PAGE_ACTIVITY_NAME); // no error

编辑 Mainfest.xml,以便在此处强制执行纵向布局:

<activity android:name=".MainPage"
    android:screenOrientation="portrait"
    android:configChanges="orientation|keyboardHidden">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

...这使得此代码毫无用处(styles.xml 也可用于 window 样式):

Window g = getWindow();
g.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.TYPE_STATUS_BAR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

同时将 setContentView( R.layout.activity_course_select ); 更新为正确的资源。

因为它启动了 MainPage Activity,但随后膨胀了错误的 XML 文件。


之前的一个 "suggested edit" 是交换 setContentView() 和下面段落的顺序......我已经拒绝了,因为将它设置在 Manifest.xml 中看起来更有条理(更少代码)。

您的启动器 activity 是 MainPage,但您在 MainPage activity 的 onCreate 方法

中调用 courselect activity 的布局
setContentView(R.layout.activity_course_select);

将其更改为您的 MainPage 布局

setContentView(R.layout.yourMainPageLayout);