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