2015-12-29 94 views
0

我的應用程序連續運行,因此我同時打開大量彈出窗口。我試圖把以下代碼:檢查彈出窗口是否打開時出錯

if (pwindo.isShowing()) 
      { 
       pwindo.dismiss(); 
      } 

我的代碼的地方標記爲**************************** ******:

public class travel extends AppCompatActivity { 
    private PopupWindow pwindo; 
    Handler mHandler = new Handler(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.travel_layout2); 
mHandler.postDelayed(runnable, 100); 
    } 



private Runnable runnable = new Runnable() 
{ 
     public void run() 
     { 
      for (int i=begin;i<=end;i++) 
      { 
       if ((gps > Float.parseFloat(words[2+i*6])-0.11)&& (counter==i)&&(gps < Float.parseFloat(words[2+i*6]))) 
       { 
        if ((words[3+i*6]!= null && !words[3+i*6].isEmpty())||(number==end)||(count>0)) { 
         initiatePopupWindow(); 
        } 
       } 
      } 
      mHandler.postDelayed(runnable, 100); 
      if (gps > latEnd) 
      { 
       mHandler.removeCallbacks(runnable); 
      } 
     } 
    }; 





//**************************************************** 
    private void initiatePopupWindow() 
    { 
//**************************************************** 
     try 
     { 
//**************************************************** 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View layout = inflater.inflate(R.layout.screen_popup,(ViewGroup) findViewById(R.id.popup_element)); 
      pwindo = new PopupWindow(layout, 700, LayoutParams.FILL_PARENT, true); 
//**************************************************** 
      pwindo.setBackgroundDrawable(new BitmapDrawable()); 
     //**************************************************** 
      pwindo.showAtLocation(layout, Gravity.CENTER, 0, 0); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

但它在任何情況下都不起作用。誰能告訴我我做錯了什麼? (inOncreate函數,我調用runnable函數,每隔幾秒運行一次,如果滿足一些條件,會調用initiatePopupWindow()函數以打開彈出窗口)。

回答

0

調用之前initiatePopupWindow()檢查pwindo是否已經存在。

您很可能會彈出自己的toptop,pwindo變量只存儲最近一次的地址。

+0

我已經打過電話initiatePopupWindow()之前做到這一點,但後來我得到這個錯誤:顯示java.lang.NullPointerException:嘗試調用虛擬方法「布爾android.widget.PopupWindow.isShowing()」上一個空對象引用 –

+0

我認爲這是因爲pwindo實際上並沒有初始化, –

+0

然後只是檢查看看if(pwindo!= null && pwindo.isShowing()== false){//調用彈出它} Java將在第一次空檢查之後中斷條件處理並且不調用剩餘的條件,因此不用擔心空指針異常。 – mawalker

0

您可以爲它設置標誌。 喜歡;

if(flag) 
{ 
initiatePopupWindow(); 

flag==false; 
} 
相關問題