2011-12-07 117 views
3

我正在尋找一種方法,允許我訪問另一個類的對象; 這兩個類都在同一個Android活動 - OpenStreeMapActivity.java中。我有:如何從另一個類訪問對象(例如ArrayList)?

ItemizedOverlay.java - 包含我想訪問和修改對象:

private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 

BalloonOverlayView.java - 就是我想要訪問的對象mOverlays:

protected void setupView(final Context context, final ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflater.inflate(R.layout.balloon_overlay, parent); 
    title = (TextView) v.findViewById(R.id.balloon_item_title); 
    snippet = (TextView) v.findViewById(R.id.balloon_item_snippet); 

    // Get ballon_close button and register its listener: 
    ImageView close = (ImageView) v.findViewById(R.id.balloon_close); 
    close.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      parent.setVisibility(GONE); 

      Intent intent = new Intent(); 
      intent.setClassName("org.example.openstreetmap", "org.example.openstreetmap.UpdateEntityActivity"); 
      v.getContext().startActivity(intent); 

      //HERE I return from UpdateOverlayActivity.java and is where I want to modify *mOverlays*. 
     } 
    }); 

} 

編輯:我發現這是不正確的,我回到//這裏。

+0

你不能傳遞對象mOverlays的方法setupView函數的參數?如果沒有,你仍然可以在調用setupView之前將它分配給BalloonOverlayView類的公共屬性,對嗎? –

回答

1

可以使BalloonOverlayView持有引用OverlayItem對象的名單是這樣的:

public class BalloonOverlayView{ 
List<OverlayItem> items = null; 
public BalloonOverlayView(List<OverlayItem> items){ 
    this.items = items; 
} 
// Now you can use the ItemizedOverlay class from within this class as you wish 
public void addItem(OverlayItem item){ 
    items.add(item); 
} 
public void removeItem(OverlayItem item){ 
    item.remove(item); 
} 
} 
+0

你的建議給我的項目'(例如items.getItem())',但它不允許我做'items.add(overlay)'或'items.remove(inDrag)'之類的東西。 – fulupr

+0

@ kako13是的,你可以做到這一點,請參閱我的更新 – GETah

+0

我添加了'public void addItem(Item item){items.add(item); }'但現在我得到一個錯誤,說:「方法add(Item)是未定義的類型ItemizedOverlay」。 – fulupr

3

在ItemizedOverlay中,創建一個提供該對象的方法。

public List<OverlayItem> getOverlays() { 
    return this.mOverlays; 
} 

更好的是,如果你使用列表,如果將來你想改變它的實現它不影響你的代碼在別處。

+0

您正在建議我更改列表的Arraylist?我如何在另一個類中調用getOverlay? – fulupr

+0

this.mOverlays仍然可以是ArrayList。但是,在公開數據時,將其指定爲更通用的超類/接口可以讓您在需要時更輕鬆地進行替換(如果您在某些時候決定使用您自己的List實現而不是Arrayylist,則不需要ItemizedOverlay之外的更改)。關於另一個問題,顯然你需要獲得你想要調用的對象的引用;您需要以類似的方式將引用傳遞給調用類。這是基本的Java,如果你有困難與它測試它與基本控制檯程序之前進入Android – SJuan76

+0

你是對的,'私人列表 mOverlays =新的ArrayList ();'是首選'私人ArrayList mOverlays =新ArrayList ();'。另外,我明白了,我應該引用我想從其他課程中操作的對象。謝謝。順便說一句,我喜歡你的暱稱,它記得我聖胡安,PR。 – fulupr