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

时间:2015-08-13 12:09:16

标签: android

我需要在退出app时清除密码字段,我在其他活动中退出应用程序并在退出时转到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();
    }

3 个答案:

答案 0 :(得分:1)

MainActivity中这样做:

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

    editText.SetText("");
}

因此,每当editText恢复时,它都会清除MainActivity值。

答案 1 :(得分:1)

或者当您单击登录按钮时

  

editText.SetText( “”);

然后在另一个活动开始之前它将被清除

答案 2 :(得分:0)

如果您的活动不再在内存中,使用setText将无法工作,甚至可能会抛出某种类型的NPE。 根据您的要求,您可以通过以下几种方式执行此操作:

  1. 您只需清除活动/片段的onStop或onDestroy覆盖中的文本字段

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

  3. 在Application类中,创建一个实现ActivityLifeCycleCallbacks的嵌套类。这是一个很好的实现类,因为它允许您监视所有活动的状态。它为我解决了很多问题 如果你有一个单例模型,或者绑定到你的密码TextView的静态字符串值,那么你几乎就在那里(如果你给我们更多信息,可以使用其他解决方法)。

    让我们看看一些代码:

    设计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可以清除密码。很多选择。