2012-05-07 19 views
0

これは私のNearMeアクティビティです。私はGoogleマップ上のマーカーをしたいです。誰かがクリックマーカーまたはオーバーレイをクリックすると、警告ダイアログが1つ表示されます。これはMapGroupActivityからのMapActivity呼び出しです。はいけない仕事?

public class NearMeActivity extends MapActivity implements OnClickListener { 
    private Button imgbtn_map_filter; 
    private MapView mapView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.nearme_layout); 

     setMapNOverlay(); 
     setUI(); 
     imgbtn_map_filter.setOnClickListener(this); 

     final TabGroupActivity parentActivity = (TabGroupActivity) getParent(); 
     parentActivity.closeAllChildsExceptLastOne(); 
    } 

    private void setUI() { 
     imgbtn_map_filter = (Button) findViewById(R.id.btn_map_filter); 
    } 

    private void setMapNOverlay() { 
     mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setBuiltInZoomControls(true); 

     List<Overlay> mapOverlays = mapView.getOverlays(); 
     Drawable drawable = this.getResources().getDrawable(R.drawable.balloon); 
     MyItemizedOverlay itemezedOverlay = new MyItemizedOverlay(drawable, 
       this); 

     GeoPoint point = new GeoPoint(19240000, -99120000); 
     OverlayItem overlayitem = new OverlayItem(point, "Holaaaa! !!", 
       "Fuck offf"); 

     itemezedOverlay.addOverlay(overlayitem); 
     mapOverlays.add(itemezedOverlay); 

    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.btn_map_filter: 
      //start activity for result da var onlar incelenecek 
      Intent intent = new Intent(getParent(), TestActivity.class); 
      TabGroupActivity parentActivity = (TabGroupActivity) getParent(); 
      parentActivity.startChildActivity ("TestActivity", intent); 
      break; 
     default: 
      break; 
     } 

    } 
} 

これはItemizedOverlayクラスです。私は1つの警告ダイアログを表示しようとしています。 >成功し を実行しますが、警告ダイアログbuiderいけない仕事 - 私は.SHOW()Toast.makeText(mContext、 "BLAのBLA"、Toast.LENght_LONG)を書きました

public class MyItemizedOverlay extends ItemizedOverlay { 
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
    Context mContext; 
    public MyItemizedOverlay(Drawable defaultMarker, Context context) { 
     super(boundCenterBottom(defaultMarker)); 
     mContext = context; 
    } 

    //bir Overlay'e dokunduğu zaman olaylar olaylar 
    @Override 
    protected boolean onTap(int index) { 
     OverlayItem item =mOverlays.get(index); 
     AlertDialog.Builder dialog= new AlertDialog.Builder(mContext); 
     dialog.setTitle(item.getTitle()); 
     dialog.setMessage(item.getSnippet()); 
     try{ 
     dialog.show(); 
     }catch(Exception el){ 
      Log.d("Error: ---->" + e.toString) 
     } 
return super.onTap(index); 

}

public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     // ne zaman bir overlay eklesek populate methodunu çalıştırmamız 
     // gerekmektedir. Yen bir overlay 
     // nesnesi eklemek için 
     // populate methodu çalıştığı zaman overlay createItem çalıştıracaktır 
     populate(); 
    } 

    // eklenen overlay'in yerini verir. 
    @Override 
    protected OverlayItem createItem(int i) { 
     return mOverlays.get(i); 
    } 

    // eklenen yeni overlayın seize'ını almamız gerekmektedir 
    @Override 
    public int size() { 
     return mOverlays.size(); 

    } 
} 

タップ方法で。

私はこのエラーを取っています: android.view.WindowManager $ BadTokenException:ウィンドウを追加することができませんが - トークン[email protected]が有効ではありません。あなたの活動は実行されていますか?

リターンsuper.onTap(インデックス)

+0

ちょうどこのリンクをたどります同じ問題に関する私の返信 http://stackoverflow.com/questions/10415033/display-dialog-box-when-i-click-on-the-maps-place-marker-icon/10426479#10426479 –

+0

私は彼のエラー: android.view.WindowManager $ BadTokenException:ウィンドウを追加できません - トークン[email protected]は無効です。あなたの活動は実行されていますか? – icmeyecektim

答えて

1

コピーNearMeActivityでこのコード、

 @Override 
protected Dialog onCreateDialog(int id) { 

    // TODO Auto-generated method stub 

    switch (id) { 
     case 0: 
      return new AlertDialog.Builder(this).setTitle("Hello").setIcon(
        R.drawable.ic_launcher).setPositiveButton("Yes", 
        new OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog , 
           int which) { 

          // TODO Auto-generated method stub 

         } 
        }).setCancelable(true).setNegativeButton("Cancel", 
        new OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog , 
           int which) { 

          // TODO Auto-generated method stub 

         } 
        }) 

      .setOnCancelListener(new OnCancelListener() { 

       @Override 
       public void onCancel(DialogInterface dialog) { 

        // TODO Auto-generated method stub 
        Toast.makeText(getApplicationContext(), "Dismiss", 
          Toast.LENGTH_SHORT).show(); 
       } 

      }).create(); 


     default: 
      break; 
    } 
    return null; 
} 

し、ダイアログを表示するようにcom.google.android.maps.ItemizedOverlayのサブクラスでONTAPメソッドからこのメソッドを呼び出します。

 @Override 
    protected boolean onTap(int index) { 

     // TODO Auto-generated method stub 

     switch (index) { 
      case 0: 
       showDialog(0); 
            break; 
        } 
      } 
+1

ありがとう。私はこのように問題を解決しています。 1行のコードを変更しました。 NearMeクラスが変更されました MyItemizedOverlay itemezedOverlay = new MyItemizedOverlay(drawable、NearMeActivity.this.getParent());代わり MyItemizedOverlay itemezedOverlay =新しいMyItemizedOverlay(描画可能、 本)の 。 – icmeyecektim