2010-12-15 64 views
-1

我有一個MapView,與itemizedoverlays,酷似在Android開發者指南的例子:http://developer.android.com/resources/tutorials/views/hello-mapview.html可以從ItemizedOverlay類開始一個Intent嗎? (MapView類項目)

在itemizedoverlay,我有一個個性化的對話,一個按鈕。所有罰款直到這裏,但現在我有問題試圖添加功能的按鈕。我需要按鈕開始一個新的活動,但我無法實現....¿爲什麼?因爲在這一行:i = new Intent (NyItemizedOverlay.class, Locate.class);我有當前的Intent類作爲第一個參數,目標意圖類在第二個參數。

MyItemizedOverlay不是一個Intent類...它是ItemizedOverlay擴展,然後當我嘗試啓動intent時,它不編譯,我試圖傳遞一個普通類作爲第一個參數,並且它需要一個intent類。我必須把發射器類,但發射器類不是一個意圖:S

如果我試圖把第一個參數的另一個意圖類,我得到這個錯誤:No enclosing instance of the type AllActivity is accessible in scope ....(AllActivity是一個公共我的應用程序的活動類)

我該如何解決這個問題?

完整的代碼在這裏:

public class MyItemizedOverlay extends ItemizedOverlay { 


private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
private ArrayList<String> permissions = new ArrayList<String>(); 
private Context mContext; 

public MyItemizedOverlay(Drawable defaultMarker) { 
    super(boundCenterBottom(defaultMarker)); 
} 

protected OverlayItem createItem(int i) { 
    return mOverlays.get(i); 
} 

public int size() { 
    return mOverlays.size(); 
} 

public void addOverlay(OverlayItem overlay) { 
    mOverlays.add(overlay); 
    populate(); 
} 
public void addOverlay(OverlayItem overlay,String permission) { 
    mOverlays.add(overlay); 
    permissions.add(permission); 
    populate(); 
} 

public MyItemizedOverlay(Drawable defaultMarker, Context context) { 
    //super(defaultMarker); 
    super(boundCenterBottom(defaultMarker)); 
    mContext = context; 
} 
public void clear() 
{ 
    mOverlays.clear(); 
    permissions.clear();//lista de permisos de cada usuario, ya que hay dos campos, el email (snippet) y el permission, una lista. 
} 

protected boolean onTap(int index) { 
    try{ 
    OverlayItem item = mOverlays.get(index); 
    if (permissions.size()==0) 
    {  
    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
    dialog.setTitle(item.getTitle()); 
    dialog.setMessage(item.getSnippet()); 
    dialog.show(); 
    } 
    else 
    { 

    //set up dialog 
    Dialog dialog = new Dialog(mContext); 
    dialog.setContentView(R.layout.personal_dialog); 
    dialog.setTitle(item.getTitle()); 
    dialog.setCancelable(true); 
    //there are a lot of settings, for dialog, check them all out! 


    //set up text 
    TextView DialogEmail = (TextView) dialog.findViewById(R.id.DialogEmail); 
    TextView DialogPermission = (TextView) dialog.findViewById(R.id.DialogPermission); 
    DialogEmail.setText(item.getSnippet()); 
    DialogPermission.setText(permissions.get(index)); 

    final String userName=item.getTitle(); 
    final String email=item.getSnippet(); 
    final int cont=index; 
    //set up button 
    Button button = (Button) dialog.findViewById(R.id.DialogButton); 
    button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //do something 
     Bundle bundle = new Bundle(); //bundle is like the letter 
     bundle.putString ("user",userName); //arg1 is the keyword of the txt, arg2 is the txt 
      bundle.putString ("email", email); 
      bundle.putString ("permission", permissions.get(cont)); 
      Intent i=null; 

      i = new Intent (MyItemizedOverlay.class, Locate.class); 

      i.putExtras(bundle); 
      startActivity(i); 
    } 
    }); 
    //now that the dialog is set up, it's time to show it  
    dialog.show(); 

    } 
    }catch(Exception e){} 
    return true; 
} 


} 

回答

4

Intent javadoc清楚地表明,第一個參數必須是(按活動擴展)上下文,第二個類你試圖啓動活動。在你的情況,你需要做的:

Intent intent = new Intent(mContext, AllActivity.class); 
mContext.startActivity(intent); 
+0

解決!非常感謝 – NullPointerException 2010-12-15 14:49:05

3

一般,意圖獲得在其構造Context作爲第一個參數之一和Activity類作爲第二個。所以,請執行下列操作:

Intent intent = new Intent(mContext, AllActivity.class); 
mContext.startActivity(intent); 
+0

它的工作原理!但現在我有另一個問題:S ....我需要知道變量fullName,電子郵件和權限,啓動與該包的活動,但是當我按下按鈕時訪問這些變量,這些變量不存在......這是合乎邏輯的,這些變量的值是外部的,並且當按鈕按下的監聽器啓動時會丟失......我怎樣才能在按鈕的監聽器上獲得這些變量值? – NullPointerException 2010-12-15 14:35:01

+1

ypu可以爲您的意圖使用putExtra()和getExtras()。但是,最好將答案標記爲正確,並提出另一個問題或僅搜索活動之間的數據傳遞。 – 2010-12-15 14:36:38

+1

它不會丟失。使用'MyItemizedOverlay.this.name'等 – Falmarri 2010-12-15 14:37:17

0

爲了意向構造應該通過實施這一類的應用程序包的Context,檢查this。這不是意圖。
它必須是一些活動,例如MyClass使用您的MyItemizedOverlay類。最好的辦法是在Context處聲明myContext,並在onCreate中聲明其值爲myContext = MyClass.this;。然後你可以聲明這樣的意圖

new Intent (MyClass.myContext , Locate.class); 
相關問題