我需要在我的一个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()函数)没有。 以下是上述逻辑的日志:
: 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 在答案中说,所以我将接受他的回答。
答案 0 :(得分:0)
我猜它工作正常。这是我理解的,在你有第一次背压时,
[UI_FirstActivity] alone and it pops making the stack empty.
但是你有第二次,
[UI_SecondActivity,UI_FirstActivity] so it pops UI_SecondActivity alone you have 1 item in stack still.
如果我误解了你的问题,请纠正我。
答案 1 :(得分:0)
是否还有其他线程同时将字符串压入堆栈。最初只弹出一个字符串'UI_FirstActivity'。大约在同一时间,一些线程正在推动新的字符串。因此,当您执行第二次弹出时,另一个线程必须再次按下相同的字符串