无法从静态堆栈中多次弹出()

时间:2013-09-18 05:26:13

标签: java android stack

我需要在我的一个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 在答案中说,所以我将接受他的回答。

2 个答案:

答案 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'。大约在同一时间,一些线程正在推动新的字符串。因此,当您执行第二次弹出时,另一个线程必须再次按下相同的字符串