Android 退出时清除其他活动中的密码字段

Android 退出时清除其他活动中的密码字段,android,Android,我需要在应用程序退出时清除密码字段,我在其他活动中退出应用程序,在退出时转到mainActivity,其中包含登录详细信息,我需要在其中清除密码字段,我将如何在其他活动中执行此操作,我尝试使用setText(“”),但没有成功 public void backButtonHandler() { AlertDialog.Builder alertDialog = new AlertDialog.Builder( ReminderActivity.th

我需要在应用程序退出时清除密码字段,我在其他活动中退出应用程序,在退出时转到mainActivity,其中包含登录详细信息,我需要在其中清除密码字段,我将如何在其他活动中执行此操作,我尝试使用setText(“”),但没有成功

public void backButtonHandler() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                ReminderActivity.this);
        // Setting Dialog Title
        alertDialog.setTitle("Leave application?");
        // Setting Dialog Message
        alertDialog.setMessage("Are you sure you want to leave the application?");

        // Setting Positive "Yes" Button
        alertDialog.setPositiveButton("YES",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
             //I need to clear here all pwd data present in MainActivity in edittext
                 finish();
                    }
                });
        // Setting Negative "NO" Button
        alertDialog.setNegativeButton("NO",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // Write your code here to invoke NO event
                        dialog.cancel();
                    }
                });
        // Showing Alert Message
        alertDialog.show();
    }

在您的
main活动中
执行以下操作:

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    editText.SetText("");
}

因此,只要恢复
main活动
,它就会清除
editText
值。

main活动
中,执行以下操作:

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    editText.SetText("");
}

因此,只要恢复
main活动
,它就会清除
editText
值。

main活动
中,执行以下操作:

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    editText.SetText("");
}

因此,只要恢复
main活动
,它就会清除
editText
值。

main活动
中,执行以下操作:

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    editText.SetText("");
}

因此,无论何时恢复您的
main活动
,或单击登录按钮,它都会清除
editText
值。

editText.SetText(“”)


然后,在另一个活动开始之前或单击“登录”按钮时,它将被清除

editText.SetText(“”)


然后,在另一个活动开始之前或单击“登录”按钮时,它将被清除

editText.SetText(“”)


然后,在另一个活动开始之前或单击“登录”按钮时,它将被清除

editText.SetText(“”)


然后,在另一个活动开始之前,它将被清除。如果您的活动不再在内存中,则使用setText将无法工作,甚至可能引发某种类型的NPE。 根据您的要求,有几种方法可以做到这一点:

  • 您只需清除activity/fragment的onStop或onDestroy覆盖中的文本字段即可

  • 如果您必须从其他活动中设置文本字段,那么我建议采用以下设计:

  • 在应用程序类中,创建实现ActivityLifeCycleCallbacks的嵌套类。这是一个很好的实现类,因为它允许您监视所有活动的状态。它为我解决了很多问题 如果您有一个单例模型,或者静态字符串值绑定到您的密码文本视图,那么您就差不多做到了(如果您提供更多信息,还可以使用其他解决方法)

    让我们来看一些代码:

    设计1:

    public void onStop()
    {
       super.onStop();
       myTextField.setText("");
    }
    
    您的应用程序类:

    public class MyApplication extends Application
    {
      ...
      private static final class MyActivityLifeCycleCallback implements ActivityLifecycleCallbacks
    {
    
        @Override
        public void onActivityStopped(Activity activity)
        {
            //Here, I am assuming that your class name is MainActivity
            Log.i(TAG, "onActivityStopped:" + activity.getLocalClassName());
            if("MainActivity".isEqual(activity.getLocalClassName())
            {
                myDataModel.getInstance().setPassword("");
                //or if your password String member is static
                //((MainActivity)activity).myPasswordMember = "";
            }
    
    
             //Or if you want to only clear the password text when RAActivity stops, simply replace "MainActivity" with the RAActivity class name.
    
        }
    
        @Override
        public void onActivityDestroyed(Activity activity,
                Bundle savedInstanceState)
        {
            Log.i(TAG, "onActivityDestroyed:" + activity.getLocalClassName());
            if(activity.getLocalClassName().contains("MySecondActivity"))
            {
    //reset your password here - implementation will depend on how you have your data model organized (private, singleton, static, etc.)
            }
    
        }
    
       ....
    
      }
    
    请记住,这种设计可以很好地与某种类型的单例或中心数据模型(想想MVC体系结构)配合使用,这样您就可以将数据中的更改传播到组件中

    希望能有帮助

    编辑: 我已经根据你的评论添加了代码。但老实说,我认为最好像我建议的那样,在MainActivity的onStop函数中调用setText(“”)方法。这是一个简单的问题,我的第二个设计可能有点太多了。无论如何,代码已经更新,因此如果您喜欢,请将其标记为答案:)


    还有一个想法。如果RAActivity使用startActivity再次调用MainActivity(可能不是),您只需将一个bundle值传递给MainActivity,告诉它它来自RAActivity。这样,如果从RAActivity调用,MainActivity可以清除密码。有很多选择。

    如果您的活动已不在内存中,则使用setText将不起作用,甚至可能引发某些类型的NPE。 根据您的要求,有几种方法可以做到这一点:

  • 您只需清除activity/fragment的onStop或onDestroy覆盖中的文本字段即可

  • 如果您必须从其他活动中设置文本字段,那么我建议采用以下设计:

  • 在应用程序类中,创建实现ActivityLifeCycleCallbacks的嵌套类。这是一个很好的实现类,因为它允许您监视所有活动的状态。它为我解决了很多问题 如果您有一个单例模型,或者静态字符串值绑定到您的密码文本视图,那么您就差不多做到了(如果您提供更多信息,还可以使用其他解决方法)

    让我们来看一些代码:

    设计1:

    public void onStop()
    {
       super.onStop();
       myTextField.setText("");
    }
    
    您的应用程序类:

    public class MyApplication extends Application
    {
      ...
      private static final class MyActivityLifeCycleCallback implements ActivityLifecycleCallbacks
    {
    
        @Override
        public void onActivityStopped(Activity activity)
        {
            //Here, I am assuming that your class name is MainActivity
            Log.i(TAG, "onActivityStopped:" + activity.getLocalClassName());
            if("MainActivity".isEqual(activity.getLocalClassName())
            {
                myDataModel.getInstance().setPassword("");
                //or if your password String member is static
                //((MainActivity)activity).myPasswordMember = "";
            }
    
    
             //Or if you want to only clear the password text when RAActivity stops, simply replace "MainActivity" with the RAActivity class name.
    
        }
    
        @Override
        public void onActivityDestroyed(Activity activity,
                Bundle savedInstanceState)
        {
            Log.i(TAG, "onActivityDestroyed:" + activity.getLocalClassName());
            if(activity.getLocalClassName().contains("MySecondActivity"))
            {
    //reset your password here - implementation will depend on how you have your data model organized (private, singleton, static, etc.)
            }
    
        }
    
       ....
    
      }
    
    请记住,这种设计可以很好地与某种类型的单例或中心数据模型(想想MVC体系结构)配合使用,这样您就可以将数据中的更改传播到组件中

    希望能有帮助

    编辑: 我已经根据你的评论添加了代码。但老实说,我认为最好像我建议的那样,在MainActivity的onStop函数中调用setText(“”)方法。这是一个简单的问题,我的第二个设计可能有点太多了。无论如何,代码已经更新,因此如果您喜欢,请将其标记为答案:)


    还有一个想法。如果RAActivity使用startActivity再次调用MainActivity(可能不是),您只需将一个bundle值传递给MainActivity,告诉它它来自RAActivity。这样,如果从RAActivity调用,MainActivity可以清除密码。有很多选择。

    如果您的活动已不在内存中,则使用setText将不起作用,甚至可能引发某些类型的NPE。 根据您的要求,有几种方法可以做到这一点:

  • 您只需清除activity/fragment的onStop或onDestroy覆盖中的文本字段即可

  • 如果您必须从其他活动中设置文本字段,那么我建议采用以下设计:

  • 在应用程序类中,创建实现ActivityLifeCycleCallbacks的嵌套类。这是一个很好的实现类,因为它允许您监视所有活动的状态。它为我解决了很多问题 如果您有一个单例模型,或者静态字符串值绑定到您的密码文本视图,那么您就差不多做到了(如果您提供更多信息,还可以使用其他解决方法)

    让我们来看一些代码:

    设计1:

    public void onStop()
    {
       super.onStop();
       myTextField.setText("");
    }
    
    您的应用程序类:

    public class MyApplication extends Application
    {
      ...
      private static final class MyActivityLifeCycleCallback implements ActivityLifecycleCallbacks
    {
    
        @Override
        public void onActivityStopped(Activity activity)
        {
            //Here, I am assuming that your class name is MainActivity
            Log.i(TAG, "onActivityStopped:" + activity.getLocalClassName());
            if("MainActivity".isEqual(activity.getLocalClassName())
            {
                myDataModel.getInstance().setPassword("");
                //or if your password String member is static
                //((MainActivity)activity).myPasswordMember = "";
            }
    
    
             //Or if you want to only clear the password text when RAActivity stops, simply replace "MainActivity" with the RAActivity class name.
    
        }
    
        @Override
        public void onActivityDestroyed(Activity activity,
                Bundle savedInstanceState)
        {
            Log.i(TAG, "onActivityDestroyed:" + activity.getLocalClassName());
            if(activity.getLocalClassName().contains("MySecondActivity"))
            {
    //reset your password here - implementation will depend on how you have your data model organized (private, singleton, static, etc.)
            }
    
        }
    
       ....
    
      }
    
    记住这个设计