我需要在退出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();
}
答案 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。 根据您的要求,您可以通过以下几种方式执行此操作:
您只需清除活动/片段的onStop或onDestroy覆盖中的文本字段
如果您必须从其他活动设置文本字段,那么我建议采用以下设计:
在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可以清除密码。很多选择。