Android 从父级销毁当前视图
Android Destroy current view from parent
我有一个父 activity,它根据这样的检查设置对简历的看法:
public class AppLockActivity extends AppCompatActivity {
@BindView(R.id.btnSubmit)
Button submitButton;
private static final String TAG = "AppLockActivity";
private static TimeElapsed timeElapsedInstance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
timeElapsedInstance = TimeElapsed.getInstance();
timeElapsedInstance.resetTime();
timeElapsedInstance.setStartTime();
}
@Override
protected void onResume() {
super.onResume();
//check if app has passed a time threshold
if(timeElapsedInstance.getStartTime() != 0){
timeElapsedInstance.setEndTime(Calendar.getInstance().getTimeInMillis());
long threshold = timeElapsedInstance.getEndTime()-timeElapsedInstance.getStartTime();
Log.d(TAG,"Threshold : "+threshold);
//Current timeout threshold set to 30s
if(threshold>30000){
setContentView(R.layout.activity_app_lock);
ButterKnife.bind(this);
}else{
}
}
}
@OnClick(R.id.btnSubmit) void onSubmit() {
//destroy current(Parent) view and show the previous
}
}
此 activity 由 MainAcitivty 等其他活动扩展...
public class MainActivity extends AppLockActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
}
}
当应用程序进入后台并恢复时,将调用 onResume 函数并根据检查设置新视图 - R.layout.activity_app_lock。我想要做的是单击此视图中的提交按钮 我想销毁当前视图,即(R.layout.activity_app_lock)并显示子 activity 中的先前视图,如 MainActivity(R.layout.activiyt_main)...
有人知道我该怎么做吗?
谢谢
您实际上可以用不同的视图再次调用 setContentView
。您的所有绑定都需要重置,并且您的 On_____Listeners
需要清除,否则您将发生内存泄漏。除此之外,它会准备好供您使用。
尽管我建议使用另一种方法来更改布局。相反,创建一个新的 Activity 来替换您当前提交的布局。然后,不用担心泄漏,您只需在用户提交时在锁 Activity 上调用 finish()
。效果是一样的,而且会更通用(在我看来)。
我有一个父 activity,它根据这样的检查设置对简历的看法:
public class AppLockActivity extends AppCompatActivity {
@BindView(R.id.btnSubmit)
Button submitButton;
private static final String TAG = "AppLockActivity";
private static TimeElapsed timeElapsedInstance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
timeElapsedInstance = TimeElapsed.getInstance();
timeElapsedInstance.resetTime();
timeElapsedInstance.setStartTime();
}
@Override
protected void onResume() {
super.onResume();
//check if app has passed a time threshold
if(timeElapsedInstance.getStartTime() != 0){
timeElapsedInstance.setEndTime(Calendar.getInstance().getTimeInMillis());
long threshold = timeElapsedInstance.getEndTime()-timeElapsedInstance.getStartTime();
Log.d(TAG,"Threshold : "+threshold);
//Current timeout threshold set to 30s
if(threshold>30000){
setContentView(R.layout.activity_app_lock);
ButterKnife.bind(this);
}else{
}
}
}
@OnClick(R.id.btnSubmit) void onSubmit() {
//destroy current(Parent) view and show the previous
}
}
此 activity 由 MainAcitivty 等其他活动扩展...
public class MainActivity extends AppLockActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
}
}
当应用程序进入后台并恢复时,将调用 onResume 函数并根据检查设置新视图 - R.layout.activity_app_lock。我想要做的是单击此视图中的提交按钮 我想销毁当前视图,即(R.layout.activity_app_lock)并显示子 activity 中的先前视图,如 MainActivity(R.layout.activiyt_main)...
有人知道我该怎么做吗? 谢谢
您实际上可以用不同的视图再次调用 setContentView
。您的所有绑定都需要重置,并且您的 On_____Listeners
需要清除,否则您将发生内存泄漏。除此之外,它会准备好供您使用。
尽管我建议使用另一种方法来更改布局。相反,创建一个新的 Activity 来替换您当前提交的布局。然后,不用担心泄漏,您只需在用户提交时在锁 Activity 上调用 finish()
。效果是一样的,而且会更通用(在我看来)。