2011-12-07 23 views
3

私は別のクラスのオブジェクトにアクセスできる方法を探しています。 両方のクラスが同じAndroidアクティビティ - OpenStreeMapActivity.java内にあります。私が持っている:別のクラスからオブジェクト(ArrayListなど)にアクセスするにはどうすればよいですか?

ItemizedOverlay.java - 私がアクセスして変更するオブジェクトが含ま: - :

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*. 
     } 
    }); 

} 

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

BalloonOverlayView.javaを私はオブジェクトmOverlaysにアクセスする場所です編集:私は//ここに戻ることは真実ではないことを理解しました。

+0

あなたは、メソッドsetupViewのパラメータとしてオブジェクトmOverlaysを渡すことはできませんか?そうでない場合は、setupViewが呼び出される前にBalloonOverlayViewクラスのパブリックプロパティに割り当てることができます。 –

答えて

1

あなたはBalloonOverlayViewOverlayItemオブジェクトのリストへの参照をこのように保持することができます:

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); } 'しかし、今私はエラーが表示されます:"メソッド(Item)はItemizedOverlay型のための定義されていません "。 – fulupr

3

ItemizedOverlayでは、オブジェクトを提供するメソッドを作成します。

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

将来的にあなたはそれが他の場所であなたのコードには影響しない実装を変更したい場合は、そのリストを使用する場合より良いです。

+0

リストのためにArraylistを変更することをお勧めしますか?他のクラスでgetOverlaysを呼び出す方法は? – fulupr

+0

this.mOverlaysはArrayListでもかまいません。しかし、データを公開する際には、より一般的なスーパークラス/インタフェースとして指定することで、必要に応じて簡単に置き換えることができます(ある時点で、リスト作成者の代わりにListを独自に使用する場合は、ItemizedOverlay以外の変更は必要ありません)。もう1つの質問については、明らかに呼び出したいオブジェクトへの参照を取得する必要があります。呼び出し側クラスへの参照を同様の方法で渡す必要があります。これは基本的なJavaです。あなたが正しいのであれば、基本的なコンソールプログラムでテストするのが難しい場合は、 – SJuan76

+0

あなたは正しいですか?privateリスト mOverlays = new ArrayList (); 'はプライベートArrayListより優先されます mOverlays = new ArrayList (); 'また、私はそれを得る、私は他のクラスから操作したいオブジェクトへの参照を持つ必要があります。ありがとう。ところで、私はあなたのニックネームが好きです、それはサンフアン、私を覚えています。 – fulupr

関連する問題