2013-02-07 63 views
0

我想在長時間點擊地圖時創建一個彈出窗口,下面是我的代碼和popup.xml: 但是popupwindow沒有出現,並且Log表明窗口正在顯示。此外,ConstructorshowAtLocation函數有很多版本,我不清楚它們之間的區別。有人可以在我的代碼中找到錯誤嗎?非常感謝你!如何在MapLongClickListener上彈出窗口?

private void init() 
{ 
    mGMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)) 
      .getMap(); 
    if(mGMap != null) 
    { 
     mGMap.setMyLocationEnabled(true); 

     mGMap.getUiSettings().setMyLocationButtonEnabled(true); 
     mGMap.getUiSettings().setRotateGesturesEnabled(true); 
     mGMap.getUiSettings().setCompassEnabled(true); 
     mGMap. setOnMapLongClickListener (new GoogleMap.OnMapLongClickListener(){ 
      @Override 
      public void onMapLongClick(LatLng point) { 
       // TODO Auto-generated method stub 
       View popup_view = getLayoutInflater().inflate(R.layout.popup, null); 
       PopupWindow popupWindow = new PopupWindow(popup_view);    
       View parent = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getView(); 
       WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
       @SuppressWarnings("deprecation") 
       int xoff = windowManager.getDefaultDisplay().getWidth()/2 - popupWindow.getWidth()/2; 
       // 使其聚集 
       popupWindow.setFocusable(true); 
       // 設置允許在外點擊消失 
       popupWindow.setOutsideTouchable(false); 
       popupWindow.showAtLocation(parent, Gravity.CENTER, xoff, 0); 
       if(popupWindow.isShowing()){ 
        Log.i(mainActivity.toString(), "pop up is showing"); 
       } 
       popupWindow.update(); 
      } 
     }); 
    } 

而下面是我popup.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 
    <TextView 
     android:id="@+id/location_time_tag" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:text="@string/loc_date" /> 

    <ListView 
     android:id="@+id/listview_diary" 
     android:layout_width="match_parent" 
     android:layout_height="200dp" 
     android:layout_alignParentLeft="true" 
     android:smoothScrollbar="true" 
     android:layout_below="@id/location_time_tag"> 
    </ListView> 
    <EditText 
     android:id="@+id/add_note" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/listview_diary" 
     android:layout_alignParentLeft="true" 
    />  
    <Button 
     android:id="@+id/add_text_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/add_note" 
     android:layout_alignParentLeft="true" 
     android:text="寫日記"/> 
    <Button 
     android:id="@+id/del_text_btn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@id/add_text_btn" 
     android:layout_alignParentRight="true" 
     android:text="刪日記"/> 
</RelativeLayout> 

回答

0

的日誌說,你的彈出窗口已打開意味着你將錯上下文window.It意味着窗口打開,但在某些其他活動或其他類別。您應該測試適用於窗口的上下文。

+0

我試過'MainActivity',彈出窗口仍然沒有顯示。可能這不是問題... – Flybywind

+0

確定比添加窗口後在代碼中嘗試mapview.invalidate(),因爲在添加任何查看對象之後必須重繪地圖。 –

+0

我將上下文更改爲'MapFragment.getActivity()';最重要的是,我忘了'setHeight()'和'setWidth()',問題解決了。感謝您的幫助。 – Flybywind

相關問題