Как настроить видимость, переходящую из другого класса в текстовое представление и изображение, относящиеся к деятельности? - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь установить значение видимости для определенных просмотров в моей деятельности.Проблема в том, что я не вижу никаких изменений.

В своей активности при входе в систему у меня есть возможность для входа в систему с помощью отпечатка пальца.Когда у пользователя есть возможность войти в систему с помощью отпечатка пальца, моя активность скрывает EditText и отображает изображение при создании actyvity.Что я хочу сделать, так это в случае, если пользователь не сможет войти в систему по отпечатку пальца 3 раза подряд, действие должно скрыть представление изображения и показать текст редактирования, чтобы он мог войти с паролем.

Внутри моей основной деятельности у меня естьэтот метод:

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

AlertDialog вызывается, когда пользователь терпит неудачу 3 раза подряд, этоМетод находится в моем классе для обработки отпечатков пальцев:

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();
}

Я пытался достичь этого часами, но пока безуспешно.Любое предложение будет оценено.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Выполните обратный вызов для связи между YourActivity и YourHandler классом,

, например:

В 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;
}

инаконец, вызовите setListener в yourActivity

yourHandler.setlistener(YourActivity.this)

. Конечно, внедрите этот слушатель в свою деятельность

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

, что является правильным подходом в вашем случае!надеюсь, это поможет

0 голосов
/ 29 ноября 2018

Вот ваша проблема

MaskedLogin maskedLogin = new MaskedLogin();
maskedLogin.ChangeViews();

Для этого нужно создать новое действие MaskedLogin, отличное от того, которое в данный момент находится на вашем экране, поэтому вы вызываете ChangeViewsсвойство внеэкранного объекта.

Я не уверен, как задана структура вашего проекта, но вы должны попытаться сохранить ссылку на контекст / действие, чтобы вы могли вызвать ChangeViews для правильного объекта.

...