Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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/image-processing/2.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 如何将可见性从另一个类设置为属于活动的textview和imageview?_Java_Android_Android Studio_Fingerprint - Fatal编程技术网

Java 如何将可见性从另一个类设置为属于活动的textview和imageview?

Java 如何将可见性从另一个类设置为属于活动的textview和imageview?,java,android,android-studio,fingerprint,Java,Android,Android Studio,Fingerprint,我正在尝试为活动中的某些视图设置可见性值。问题是我看不到任何变化 在我的登录活动中,我可以选择让用户使用指纹登录。当用户可以选择使用指纹登录时,“我的活动”将隐藏编辑文本,并在创建ActyCity时显示图像视图。我想做的是,如果用户连续三次指纹登录失败,活动应该隐藏一个图像视图并显示一个Edittext,以便他可以使用密码登录 在我的主要活动中,我有以下方法: public void ChangeViews(Context context){ LinearLayout passwoord

我正在尝试为活动中的某些视图设置可见性值。问题是我看不到任何变化

在我的登录活动中,我可以选择让用户使用指纹登录。当用户可以选择使用指纹登录时,“我的活动”将隐藏编辑文本,并在创建ActyCity时显示图像视图。我想做的是,如果用户连续三次指纹登录失败,活动应该隐藏一个图像视图并显示一个Edittext,以便他可以使用密码登录

在我的主要活动中,我有以下方法:

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");


}
显示alertDialog后,在my FingerPrintHandler.class内调用上述方法:

 @Override
public void onAuthenticationFailed() {

CancelAuth();
setAlert("Retry writting your password");
}
当用户连续三次失败时调用AlertDialog,此方法在我的指纹处理程序类中:

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
活动安装,该安装与当前屏幕上的安装不同,因此您正在调用屏幕外对象的
ChangeViews
属性


我不确定您的项目结构是如何设置的,但您应该尝试保留对上下文/活动的引用,以便可以在正确的对象上调用
ChangeViews

进行回调以在
YourActivity
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)
当然,在活动中实现此侦听器

public class YourActivity extends Activity implements YourHandler.ViewChangeListener {
...
override void onViewChanged() {
  // call method ChangeViews here
}
...
}

对你来说,这是一个正确的方法!希望对你有帮助

我抓到你了!!让我试试这个,看看会发生什么!!我必须将上下文传递给指纹处理程序,并调用changeviews方法发送相同的上下文。很好,非常感谢@GianhTan,这对我有用@很高兴能帮助你