如何设置从另一个 class 到属于 activity 的 textview 和 imageview 的可见性?
How to set visibility gone from another class to textview and imageview that belong to activity?
我正在尝试为 activity 中的某些视图设置可见性值。问题是我没有看到任何变化。
在我的登录名 activity 中,我可以选择让用户使用指纹登录。当用户可以选择使用指纹登录时,我的 activity 会隐藏 EditText 并在创建活动时显示图像视图。我想要做的是,如果用户连续 3 次指纹登录失败,activity 应该隐藏图像视图并显示 Edittext,以便他可以使用密码登录。
在我的主要 activity 我有这个方法:
public void ChangeViews(Context context){
LinearLayout passwoordInsert;
ImageView enterBtnMasked;
ImageView imgFinger;
TextView txtFinger;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vi = inflater.inflate(R.layout.activity_masked_login, null);
passwoordInsert = vi.findViewById(R.id.password_insert_f);
enterBtnMasked = vi.findViewById(R.id.enter_btn_masked_f);
imgFinger=vi.findViewById(R.id.fingerprintImage_f);
txtFinger=vi.findViewById(R.id.text_fnger_f);
passwoordInsert.setVisibility(View.VISIBLE);
enterBtnMasked.setVisibility(View.VISIBLE);
txtFinger.setVisibility(View.GONE);
imgFinger.setVisibility(View.GONE);
Log.e("IsDataChanged", "Data is changed");
}
上面的方法在我的 FingerPrintHandler.class 显示 alertDialog 后被调用:
@Override
public void onAuthenticationFailed() {
CancelAuth();
setAlert("Retry writting your password");
}
当用户连续失败3次时调用AlertDialog,这个方法在我的fingerprinthandler里面class:
public void setAlert(String message) {
alertDialog = new SweetAlertDialog(context, SweetAlertDialog.WARNING_TYPE);
alertDialog.setTitleText("Error");
alertDialog.setContentText(message);
alertDialog.setConfirmText("Aceptar");
alertDialog.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
alertDialog.dismissWithAnimation();
MaskedLogin maskedLogin = new MaskedLogin();
maskedLogin.ChangeViews(context);
}
});
alertDialog.show();
}
几个小时以来我一直在努力实现这一目标,但还没有成功。如有任何建议,我们将不胜感激。
这是你的问题
MaskedLogin maskedLogin = new MaskedLogin();
maskedLogin.ChangeViews();
这样做是为了创建一个新的 MaskedLogin
activity 实例,它不同于当前屏幕上的实例,因此您调用 ChangeViews
属性 的屏幕外对象。
我不确定您的项目结构是如何设置的,但您应该尝试保留对 Context/activity 的引用,以便您可以在正确的对象上调用 ChangeViews
。
进行回调以在 YourActivity
和 YourHandler
之间通信 class,
示例:
在YourHandler
中创建接口
public interface ChangeViewListener {
void onViewChanged();
}
private ChangeViewListener listener;
public void setAlert(String message) {
alertDialog = new SweetAlertDialog(context, SweetAlertDialog.WARNING_TYPE);
alertDialog.setTitleText("Error");
alertDialog.setContentText(message);
alertDialog.setConfirmText("Aceptar");
alertDialog.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
if(listener != null) {
listener.onViewChanged();
}
}
});
alertDialog.show();
}
public void setListener(ChangeViewListener listener) {
this.listener = listener;
}
最后,在 yourActivity
中调用 setListener
yourHandler.setlistener(YourActivity.this)
当然,在您的 activity
中实施此侦听器
public class YourActivity extends Activity implements YourHandler.ViewChangeListener {
...
override void onViewChanged() {
// call method ChangeViews here
}
...
}
在您的情况下,这是正确的方法!希望对你有帮助
我正在尝试为 activity 中的某些视图设置可见性值。问题是我没有看到任何变化。
在我的登录名 activity 中,我可以选择让用户使用指纹登录。当用户可以选择使用指纹登录时,我的 activity 会隐藏 EditText 并在创建活动时显示图像视图。我想要做的是,如果用户连续 3 次指纹登录失败,activity 应该隐藏图像视图并显示 Edittext,以便他可以使用密码登录。
在我的主要 activity 我有这个方法:
public void ChangeViews(Context context){
LinearLayout passwoordInsert;
ImageView enterBtnMasked;
ImageView imgFinger;
TextView txtFinger;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vi = inflater.inflate(R.layout.activity_masked_login, null);
passwoordInsert = vi.findViewById(R.id.password_insert_f);
enterBtnMasked = vi.findViewById(R.id.enter_btn_masked_f);
imgFinger=vi.findViewById(R.id.fingerprintImage_f);
txtFinger=vi.findViewById(R.id.text_fnger_f);
passwoordInsert.setVisibility(View.VISIBLE);
enterBtnMasked.setVisibility(View.VISIBLE);
txtFinger.setVisibility(View.GONE);
imgFinger.setVisibility(View.GONE);
Log.e("IsDataChanged", "Data is changed");
}
上面的方法在我的 FingerPrintHandler.class 显示 alertDialog 后被调用:
@Override
public void onAuthenticationFailed() {
CancelAuth();
setAlert("Retry writting your password");
}
当用户连续失败3次时调用AlertDialog,这个方法在我的fingerprinthandler里面class:
public void setAlert(String message) {
alertDialog = new SweetAlertDialog(context, SweetAlertDialog.WARNING_TYPE);
alertDialog.setTitleText("Error");
alertDialog.setContentText(message);
alertDialog.setConfirmText("Aceptar");
alertDialog.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
alertDialog.dismissWithAnimation();
MaskedLogin maskedLogin = new MaskedLogin();
maskedLogin.ChangeViews(context);
}
});
alertDialog.show();
}
几个小时以来我一直在努力实现这一目标,但还没有成功。如有任何建议,我们将不胜感激。
这是你的问题
MaskedLogin maskedLogin = new MaskedLogin();
maskedLogin.ChangeViews();
这样做是为了创建一个新的 MaskedLogin
activity 实例,它不同于当前屏幕上的实例,因此您调用 ChangeViews
属性 的屏幕外对象。
我不确定您的项目结构是如何设置的,但您应该尝试保留对 Context/activity 的引用,以便您可以在正确的对象上调用 ChangeViews
。
进行回调以在 YourActivity
和 YourHandler
之间通信 class,
示例:
在YourHandler
中创建接口
public interface ChangeViewListener {
void onViewChanged();
}
private ChangeViewListener listener;
public void setAlert(String message) {
alertDialog = new SweetAlertDialog(context, SweetAlertDialog.WARNING_TYPE);
alertDialog.setTitleText("Error");
alertDialog.setContentText(message);
alertDialog.setConfirmText("Aceptar");
alertDialog.setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
@Override
public void onClick(SweetAlertDialog sweetAlertDialog) {
if(listener != null) {
listener.onViewChanged();
}
}
});
alertDialog.show();
}
public void setListener(ChangeViewListener listener) {
this.listener = listener;
}
最后,在 yourActivity
yourHandler.setlistener(YourActivity.this)
当然,在您的 activity
中实施此侦听器public class YourActivity extends Activity implements YourHandler.ViewChangeListener {
...
override void onViewChanged() {
// call method ChangeViews here
}
...
}
在您的情况下,这是正确的方法!希望对你有帮助