Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Android TextView.setText()在最近使用SurfaceView覆盖的三星手机上没有改变_Android_Textview_Surfaceview_Samsung Mobile - Fatal编程技术网

Android TextView.setText()在最近使用SurfaceView覆盖的三星手机上没有改变

Android TextView.setText()在最近使用SurfaceView覆盖的三星手机上没有改变,android,textview,surfaceview,samsung-mobile,Android,Textview,Surfaceview,Samsung Mobile,在我的应用程序中,我有一个文本视图和一个图像视图,我会根据传感器信息进行更新。这在模拟器和我试过的大多数手机上都能很好地工作,但是在三星的S7到S9手机上,由于某些原因,它们在应该更新时都不会改变 它们是覆盖SurfaceView(其中包含摄影机预览)的片段的一部分,它们上方还有第二个SurfaceView覆盖: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="ht

在我的应用程序中,我有一个
文本视图
和一个
图像视图
,我会根据传感器信息进行更新。这在模拟器和我试过的大多数手机上都能很好地工作,但是在三星的S7到S9手机上,由于某些原因,它们在应该更新时都不会改变

它们是覆盖SurfaceView(其中包含摄影机预览)的片段的一部分,它们上方还有第二个SurfaceView覆盖:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="myApp.CameraViewFragment">


    <FrameLayout
        android:id="@+id/control"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true">

        <myApp.CameraSurfaceView
            android:id="@+id/camera_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true" />


        <TextView
            android:id="@+id/direction"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:background="@color/black_overlay"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:layout_centerInParent="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="10dp"
            android:textSize="30dp"
            android:text="" />

        <ImageButton
            android:id="@+id/gpsNotification"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/gps_unfixed"
            android:layout_gravity="right"
            android:tint="@color/gps_unfixed"
            android:background="@null" />

    </FrameLayout>
    <com.myapp.OverlaySurfaceView 
         android:id="@+id/overlay_view"
         android:layout_width="200dp"
         android:layout_height="200dp"
         android:gravity="center"
         android:layout_gravity="center_horizontal|center_vertical"
         android:layout_centerHorizontal="true"
         android:layout_centerVertical="true" />
</FrameLayout>
当我在普通手机上运行此功能时,
directionView
文本会随着新方向数据的到来而更新。在三星S7上,该值设置一次,可能在一开始就更新一次,然后它似乎会保持不变,不再改变。如果我暂停调试器并从即时窗口调用
directionView.getText()
,它会给出我期望的结果,而不是屏幕上看到的结果。如果在即时窗口中调用
directionView.setText('ABC')
,则
directionView.getText()
返回的值会更改,但屏幕上的值也不会更改。ImageView似乎还停留在其初始状态,而不管应该如何调整它

以前关于这个主题的问题似乎涉及到没有从UI线程触发更新,或者调用视图组件上的
invalidate
失败,所以我已经修复了这两个问题,但问题仍然存在

我只在最近的三星手机上看到过这一点(我的旧三星S4似乎还不错),这使得它很难排除故障。为什么我的视图组件在三星设备上没有改变?我需要做什么才能让它们更新


编辑:向之前试图回答此问题的任何人道歉,因为我已经发布了
OverlySurfaceView
,现在我意识到,如果删除
OverlySurfaceView
,其他组件将正确更新,因此在视图层次结构中添加第二个
SurfaceView
显然会产生干扰,但仅在三星上。打开和关闭硬件加速似乎没有什么区别,但可能有一个特定的地方或方式,我需要这样做。在正常工作的手机上,“OverlySurfaceView”的硬件加速标记为禁用。

我在三星S7设备上也遇到过同样的问题, 最终我意识到我没有正确地处理setZOrderOnTop

看看这个答案:

因此,要回答您的问题,我们必须配备三星S7、S8或S9:(老实说,我不知道-这是我在我试过的手机中唯一看到的手机-我很想找到一种调试这个问题的方法,不需要昂贵的手机,我没有,但我的目标用户很可能会,绝对的。我只是…不知道它是什么。你确定这个问题是特定于设备的,并且ot安卓版本特定?我认为S4运行安卓5.1左右,S7和更高版本运行7.0或8.0。您可以尝试在模拟器上验证此行为。正如我在问题中所说,我在其他手机上尝试过,但我无法在模拟器中重现,包括配置为匹配相关手机配置文件的模拟器。o它似乎只出现在那些物理手机上。我希望这是这些手机的一个已知问题或功能,但没有任何迹象。您是否尝试在TextView或activity上禁用硬件加速?
public class CameraViewFragment extends Fragment
{
    private TextView directionView;
    private CameraSurfaceView cameraView;
    private OverlaySurfaceView overlay;

    @Override
    public void onViewCreated(final View view, Bundle savedInstanceState) {
        cameraView = (CameraSurfaceView) view.findViewById(R.id.camera);
        directionView = (TextView) view.findViewById(R.id.direction);
        overlay = (OverlaySurfaceview) view.findViewById(R.id.overlay_view);
    }

    private void setDirection(AccurateDirection direction) {
        final String directionString = direction.getDirection();
        overlay.update();
        Activity activity = getActivity();
        if ( activity != null ) {
            activity.runOnUiThread(new Runnable() {
                public void run() {
                    directionView.setText(directionString);
                    directionView.invalidate();
                }
            });
        }
    }
}