我需要在我的一个 android 应用程序中使用静态堆栈。这是我使用它的方式:
在常量文件中:
public static Stack<String> st = new Stack<String>();
在活动文件中,在 onBackPressed 方法内部使用了以下逻辑:
if (!Constants.st.isEmpty()) {
Log.i("CHECK", "Stack is not empty.");
Log.v("CHECK", "PEEK: " + Constants.st.peek());
Constants.st.pop();
if(Constants.st.isEmpty()){
Log.i("CHECK", "Stack is empty.");
}else{
Log.v("CHECK", "PEEK after POP: " + Constants.st.peek());
}
}else{
Log.i("CHECK", "Stack is empty.");
}
现在,当我按下后退按钮时(我的意思是 pop() 函数有效),然后第二次(pop() 函数)不起作用。以下是上述逻辑的Log:
: Stack is not empty.
: PEEK: UI_FirstActivity
: Stack is empty.
: Stack is not empty.
: PEEK: UI_SecondActivity
: PEEK after POP: UI_FirstActivity
: Stack is not empty.
: PEEK: UI_FirstActivity
: PEEK after POP: UI_FirstActivity
PS:另一件事是,每当所有这些 UI.. 函数包含在同一活动上显示的不同动态创建的表单时。现在,当我们输入/显示任何方法/表单时,它的名称即 UI.. 被压入堆栈。
PPS:我同意downvote,但简单的解释会非常有帮助。
PPPS:似乎EJB假设我假设 :-)。我将再次尝试解释到底发生了什么:我有一个活动我选择展示各种形式,但一次只展示一种。每个方法 UI_First... 代表一种形式。现在发生的情况是,有时其中一个表单被跳过显示,因为它不包含视图,例如 UI_Second... 所以在 UI_First... UI_Third 表单显示之后。现在,当用户按下后退按钮时,理想的情况是程序将跳过 UI_Second..(因为它不包含视图)并打开 UI_First...为了实现此功能,我使用了一个堆栈,每当显示表单时,即当 UI_First ...方法被调用,它的名字被压入堆栈。当按下后退按钮时,它会弹出。如果我不够清楚,我很抱歉。
PPPPS:我在 10 分钟前就遇到了问题。这正是pratik在答案中所说的,所以我将接受他的回答。