Android 找不到仅在横向中声明的视图的应用程序崩溃

Android 找不到仅在横向中声明的视图的应用程序崩溃,android,android-layout,nullpointerexception,Android,Android Layout,Nullpointerexception,我创建了一个Hello World应用程序,并添加了xml的横向版本。 在纵向模式下,我没有文本视图,但在横向模式下,我添加了一个文本视图。我用java为这个文本视图做了一个findviewbyid 在清单中,我将屏幕方向设置为横向 第一次启动应用程序:没问题。现在我按下关机,然后再按开机按钮,应用程序崩溃,出现NullPointer异常,textView找不到 如何确保应用程序在横向模式下直接正常加载,而不在纵向模式下查找资源 舱单: <activity android:name

我创建了一个Hello World应用程序,并添加了xml的横向版本。 在纵向模式下,我没有文本视图,但在横向模式下,我添加了一个文本视图。我用java为这个文本视图做了一个findviewbyid 在清单中,我将屏幕方向设置为横向

第一次启动应用程序:没问题。现在我按下关机,然后再按开机按钮,应用程序崩溃,出现NullPointer异常,textView找不到

如何确保应用程序在横向模式下直接正常加载,而不在纵向模式下查找资源

舱单:

    <activity android:name=".MainActivity"
        android:screenOrientation="landscape">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

如果文本视图未处于纵向模式,则需要将代码更改为:

tv = (TextView)findViewById(R.id.tv);
if(tv != null) {
   tv.setText("inLandscape");
}

我不确定它是否可能只在横向加载-当你重新打开设备电源时,它可能会尝试在纵向加载,然后切换到横向。如果该行为是特定于设备且未记录的,我不会感到惊讶。

如果您没有处于纵向模式的TextView,则需要将代码更改为:

tv = (TextView)findViewById(R.id.tv);
if(tv != null) {
   tv.setText("inLandscape");
}
我不确定它是否可能只在横向加载-当你重新打开设备电源时,它可能会尝试在纵向加载,然后切换到横向。如果这种行为是特定于设备且未记录在案,我不会感到惊讶。

添加:

android:configChanges="orientation|keyboardHidden"
在你的活动中

<activity android:name=".MainActivity"
    android:screenOrientation="landscape"
    android:configChanges="orientation|keyboardHidden">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
有关更多说明,请参见添加:

android:configChanges="orientation|keyboardHidden"
在你的活动中

<activity android:name=".MainActivity"
    android:screenOrientation="landscape"
    android:configChanges="orientation|keyboardHidden">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

有关更多说明,请参见此

当您更改方向时,您的
活动将被销毁并重新创建。您可以通过初始化
文本视图
来处理此问题,仅当手机处于
方向时

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    if(getResources().getConfiguration().orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE) {
        // Initialize your TextView here
    } else {
        // Handle your potrait here
    }

}

当您更改方向时,您的
活动将被销毁并重新创建。您可以通过初始化
文本视图
来处理此问题,仅当手机处于
方向时

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    if(getResources().getConfiguration().orientation == android.content.res.Configuration.ORIENTATION_LANDSCAPE) {
        // Initialize your TextView here
    } else {
        // Handle your potrait here
    }

}

您可以通过多种方式解决此错误。您可以在
@greybearedgeek
中设置
文本之前,在
文本视图
中添加空检查

或,您可以使用
getResources().getConfiguration().orientation
添加对设备
方向的检查。如果其仅处于
横向
模式,则将
文本
设置为
文本视图
。我已经在我的设备上进行了测试,结果很好

以下是工作代码:

import android.content.res.Configuration;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class LandscapePortraitActivity extends AppCompatActivity {

    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView)findViewById(R.id.tv);

        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            tv.setText("inLandscape");
        }
    }
}

希望这会有所帮助~

您可以通过多种方式解决此错误。您可以在
@greybearedgeek
中设置
文本之前,在
文本视图
中添加空检查

或,您可以使用
getResources().getConfiguration().orientation
添加对设备
方向的检查。如果其仅处于
横向
模式,则将
文本
设置为
文本视图
。我已经在我的设备上进行了测试,结果很好

以下是工作代码:

import android.content.res.Configuration;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class LandscapePortraitActivity extends AppCompatActivity {

    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView)findViewById(R.id.tv);

        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            tv.setText("inLandscape");
        }
    }
}

希望这将有助于~

发布您的活动类和清单文件添加到@FerdousAhamedPost您的活动类和清单文件添加到@FerdousAhamed