我在一个非常基本的应用程序上得到了这种奇怪的行为,在屏幕重定向后视图呈现错误。
当视频显示时,屏幕重定向(活动销毁/创建,因为它不拦截这些事件)时,应用程序中的代码按预期工作。
当屏幕重新定向时,视图正常工作,只有重叠定位后的重叠鬼影图像。它看起来像是一个“被烧毁”的CRT鬼影。
以任何方向启动应用程序都能正常工作,只有当屏幕在运行时重新定向时才会出现此问题。
视图在Fragment中使用,Fragment是其Activity中唯一的视图。它对ListView,DatePicker和TextView都是一样的。
多个设备出现此问题: - nexus 4运行4.4.3股票android - 三星galaxy s运行cyanogenmod 10.2.1(android 4.3.1) - “galaxy nexus”AVD,API等级为18(android 4.3)
知道这里发生了什么吗?有哪些更多信息可用于排除故障?
屏幕截图如下:
下面的ListView示例的布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_expenses"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- Row for Buttons -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="3dp" >
<Button
android:id="@+id/list_expenses_button_add"
android:layout_width="0dip"
android:layout_height="40dp"
android:layout_weight="1"
android:text="@string/label_button_listexpenses_add" />
</LinearLayout>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/label_listexpenses_noexpenses"
android:gravity="center" />
</LinearLayout>
答案 0 :(得分:1)
问题在于,由于Activity类中的以下代码,片段被重复添加到布局中,导致视图重叠(毕竟不是渲染错误):
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_expenses);
if (getSupportFragmentManager().findFragmentById(R.id.list_expenses) == null) {
fragment = ListExpensesFragment.newInstance();
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment).commit();
} else {
fragment = getSupportFragmentManager().findFragmentById(R.id.list_expenses);
}
}
解决方案:将getSupportFragmentManager().beginTransaction().add()
的号召替换为getSupportFragmentManager().beginTransaction().replace()
。