簡體   English   中英

如何設置可見性從另一個類到屬於活動的textview和imageview?

[英]How to set visibility gone from another class to textview and imageview that belong to activity?

我正在嘗試為我的活動中的某些視圖設置可見性值。 問題是我看不到任何變化。

在我的登錄活動中,我可以選擇讓用戶使用指紋登錄。 當用戶可以選擇使用指紋登錄時,我的活動將隱藏EditText並在創建actyvity時顯示圖像視圖。 我要做的是,如果用戶連續3次未能通過指紋登錄,則該活動應隱藏圖像視圖並顯示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之后,在我的FingerPrintHandler.class內部調用了上面的方法:

 @Override
public void onAuthenticationFailed() {

CancelAuth();
setAlert("Retry writting your password");
}

當用戶連續3次失敗時調用AlertDialog,此方法在我的Fingerprinthandler類中:

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活動的新實例,該MaskedLogin不同於當前屏幕上的ChangeViews ,因此您要調用屏幕外對象的ChangeViews屬性。

我不確定您的項目結構如何設置,但是您應該嘗試保留對Context / activity的引用,以便可以在正確的Object上調用ChangeViews

進行回調以在YourActivityYourHandler類之間進行通信,

例:

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調用yourActivity

yourHandler.setlistener(YourActivity.this)

當然,在您的活動中實現此偵聽器

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

在您的情況下,這是正確的方法! 希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM