运行App Android Studio时活动不正确

时间:2018-09-25 04:58:23

标签: android android-studio android-activity android-manifest android-number-picker

我已经开始在Android Studio中构建应用。我已经将MainPage建立为manifest.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/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>

我已经仔细检查了运行配置是否设置为“默认”,但应用程序正在运行名为courseSelect的其他活动。它还无法在NumberPicker上正确运行某些代码。即使我已将选择器设置为具有最小值,最大值和默认值,但选择器仅显示0,并且不会滚动。就正在运行的活动而言,这两个问题似乎有某种联系。

这是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活动,但它仍在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);
    }
    ...
}

4 个答案:

答案 0 :(得分:3)

编辑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 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活动,但随后又膨胀了错误的XML文件。


之前的一个“建议编辑”是交换setContentView()和下面的段落的顺序...我拒绝了,因为在Manifest.xml中进行设置显得更有条理(代码更少)。

答案 1 :(得分:1)

首先您的清单文件有误

您在开始标记之外编写了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

答案 2 :(得分:1)

尝试此操作,错误在第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

答案 3 :(得分:1)

您的启动器活动是MainPage,但是您在此行上在MainPage活动的onCreate方法中调用了Courseselect活动的布局

setContentView(R.layout.activity_course_select);

将其更改为您的MainPage布局

setContentView(R.layout.yourMainPageLayout);