Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 面向不同方向Android的新活动_Java_Android_Android Layout_Orientation_Landscape Portrait - Fatal编程技术网

Java 面向不同方向Android的新活动

Java 面向不同方向Android的新活动,java,android,android-layout,orientation,landscape-portrait,Java,Android,Android Layout,Orientation,Landscape Portrait,我知道我可以在我的res/文件夹中创建一个名为layoutland的文件夹,Android会自动处理这个问题。我的问题是,当我的方向从portait转向横向时,如果我想调用一个新的活动,该怎么办 我所拥有的: 用于纵向的xml文件,由按钮和滚动视图组成 包含多个按钮、文本视图、, 和编辑文本 两者都称为main.xml(但在各自的文件夹中) 一个调用setContentView(main.xml)的活动 但是,此活动必须初始化所有按钮、文本视图等,但当我将方向更改回纵向时,它将强制关闭,因为

我知道我可以在我的res/文件夹中创建一个名为layoutland的文件夹,Android会自动处理这个问题。我的问题是,当我的方向从portait转向横向时,如果我想调用一个新的活动,该怎么办

我所拥有的:

  • 用于纵向的xml文件,由按钮和滚动视图组成
  • 包含多个按钮、文本视图、, 和编辑文本
  • 两者都称为main.xml(但在各自的文件夹中)
  • 一个调用setContentView(main.xml)的活动
但是,此活动必须初始化所有按钮、文本视图等,但当我将方向更改回纵向时,它将强制关闭,因为这些按钮不在该xml文件中


我该如何解决这个问题?

尝试使用
getResources().getConfiguration().orientation
检查当前方向。 因此,当您倾斜设备时,您可以避免错误的资源膨胀

->

另一种(但不好!)方法可能是覆盖
onConfigurationChanged
,这样您的土地布局就不会被使用,您可以在倾斜时推动另一个活动。就像:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    //push new activity via intent
}

但我不推荐你这么做。试试第一种方法,告诉我这是否对你有效

Thomas的解决方案应该是可行的,但也要知道,如果纵向模式和横向模式共用的按钮执行相同的操作,您只需在尝试强制转换/分配它之前检查findViewByID(…)是否为null即可。从findViewByID(…)
的文档中,如果找到,则查看该视图,否则为null。
类似的内容应该可以工作:

Object x = findViewByID(R.id.something) != null;
if(x != null)
{
    //cast it to whatever it really is (textview, button, etc)

    //Add whatever listeners you want
}
请注意,我仍然支持Thomas的解决方案,因为这样您只需要检查一个属性,而不必检查不同布局的每个控件上的null