无法更改 onCreate 方法以外的视图的可见性
Unable to change visibility of view other than onCreate method
我无法在其他函数而不是 onCreate
方法中更改视图可见性。它仅在调用 onCreate
时工作。
public class CameraXActivity extends AppCompatActivity {
...
public Group fipGroup;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camerax_layout); // Created xml using constraintLayout.
//intial setup
fipGroup = (Group)findViewById(R.id.fip_group);
startCamera();
//hideFipGroup(); <<--- This is working
}
private void hideFipGroup() {
Log.d(TAG, "=== hideFipGroup ===");
fipGroup.setVisibility(View.INVISIBLE);
}
private void startCamera() {
CameraX.unbindAll();
preview = setPreview();
imageAnalysis = setImageAnalysis();
//bind to lifecycle:
CameraX.bindToLifecycle(this, preview , imageAnalysis);
preview.enableTorch(true);
}
private ImageAnalysis setImageAnalysis() {
hideFipGroup() // This is working
imageAnalysis.setAnalyzer(
new ImageAnalysis.Analyzer() {
@Override
public void analyze(ImageProxy image, int rotationDegrees) {
hideFipGroup() // Exactly, Failed at this place.
}
}
)
}
}
编辑更新:
无法更新 imageAnalysis
的 analyze
方法。只是为了测试,名为 toast 的消息显示在 UI 上。但是我无法控制 UI.
private void raiseToast(String msg) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 500);
toast.show();
}
});
}
请尝试view.post或runOnUIThread方法。
这么喜欢
private ImageAnalysis setImageAnalysis() {
hideFipGroup() // This is working
imageAnalysis.setAnalyzer(
new ImageAnalysis.Analyzer() {
@Override
public void analyze(ImageProxy image, int rotationDegrees) {
fipGroup.post(new Runnable() {
@Override
public void run() {
hideFipGroup(); // Exactly, Failed at this place.
}
});
}
}
)
}
或者您可以简单地在 hideFipGroup() 方法中调用 view.post() 方法
private void hideFipGroup() {
Log.d(TAG, "=== hideFipGroup ===");
fipGroup.post(new Runnable() {
@Override
public void run() {
fipGroup.setVisibility(View.INVISIBLE);
}
});
}
你应该检查你调用的函数。请记住,您只能在主线程
中更新UI
problem 在约束布局上具有组可见性。
private void setGroupVisiblity(Group group, int visibility) {
group.setVisibility(visibility);
group.requestLayout();
}
或手动关闭组中的每个视图:
private void setGroupVisibility(ConstraintLayout layout, Group group, Integer visibility) {
int[] refIds = group.getReferencedIds();
for (int id : refIds) {
layout.findViewById(id).setVisibility(visibility);
}
}
或升级到ConstraintLayout version 2.0.0 beta 6
来源:
我无法在其他函数而不是 onCreate
方法中更改视图可见性。它仅在调用 onCreate
时工作。
public class CameraXActivity extends AppCompatActivity {
...
public Group fipGroup;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camerax_layout); // Created xml using constraintLayout.
//intial setup
fipGroup = (Group)findViewById(R.id.fip_group);
startCamera();
//hideFipGroup(); <<--- This is working
}
private void hideFipGroup() {
Log.d(TAG, "=== hideFipGroup ===");
fipGroup.setVisibility(View.INVISIBLE);
}
private void startCamera() {
CameraX.unbindAll();
preview = setPreview();
imageAnalysis = setImageAnalysis();
//bind to lifecycle:
CameraX.bindToLifecycle(this, preview , imageAnalysis);
preview.enableTorch(true);
}
private ImageAnalysis setImageAnalysis() {
hideFipGroup() // This is working
imageAnalysis.setAnalyzer(
new ImageAnalysis.Analyzer() {
@Override
public void analyze(ImageProxy image, int rotationDegrees) {
hideFipGroup() // Exactly, Failed at this place.
}
}
)
}
}
编辑更新:
无法更新 imageAnalysis
的 analyze
方法。只是为了测试,名为 toast 的消息显示在 UI 上。但是我无法控制 UI.
private void raiseToast(String msg) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast toast = Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 500);
toast.show();
}
});
}
请尝试view.post或runOnUIThread方法。
这么喜欢
private ImageAnalysis setImageAnalysis() {
hideFipGroup() // This is working
imageAnalysis.setAnalyzer(
new ImageAnalysis.Analyzer() {
@Override
public void analyze(ImageProxy image, int rotationDegrees) {
fipGroup.post(new Runnable() {
@Override
public void run() {
hideFipGroup(); // Exactly, Failed at this place.
}
});
}
}
)
}
或者您可以简单地在 hideFipGroup() 方法中调用 view.post() 方法
private void hideFipGroup() {
Log.d(TAG, "=== hideFipGroup ===");
fipGroup.post(new Runnable() {
@Override
public void run() {
fipGroup.setVisibility(View.INVISIBLE);
}
});
}
你应该检查你调用的函数。请记住,您只能在主线程
中更新UIproblem 在约束布局上具有组可见性。
private void setGroupVisiblity(Group group, int visibility) {
group.setVisibility(visibility);
group.requestLayout();
}
或手动关闭组中的每个视图:
private void setGroupVisibility(ConstraintLayout layout, Group group, Integer visibility) {
int[] refIds = group.getReferencedIds();
for (int id : refIds) {
layout.findViewById(id).setVisibility(visibility);
}
}
或升级到ConstraintLayout version 2.0.0 beta 6
来源: