2010-11-19 10 views
0

私の能力を少し超えたプログラムを作成しようとしています。プログラムはGPSデータを取得し、グラフィックスの素晴らしいページに表示することになっています。私は必要なリスナインタフェースを実装することで、GPSデータにうまくアクセスできます。 SurfaceViewを採用した洗練されたプログラム構造を使って素敵なグラフィックスを表示できます。しかし、私はこれらの2つの機能(受信データとグラフィックス)を引き離そうとすると、物事が崩れます。内部クラスにデータを取得する際に問題が発生しました

プログラムのグラフィック構造は概略的に、である:

活性が、数gpsStatus /ロケーションインターフェース

Anonymous inner class Panel extends SurfaceView implements SurfaceHolder.Callback 
     onDraw() which does the drawing 

     inner (instance) class Thread 
      run() which does the canvas locking and calls onDraw() 

私は理にかなって期待を実現します。私はDroidnovaサイト、2Dグラフィックスチュートリアルからこの構造を得ました。グラフィックスは別のスレッドに描画されます。私はこれから非常に滑らかなグラフィックスを得ることができました。

SurfaceViewを拡張するクラス "Panel"は、アクティビティのonCreateで次のように作成されます。setContentView(new Panel(this));内部クラスはインスタンスとして作成されます。つまり、PanelのコンストラクタによってThread thread = new Thread()です。

GPSチップからの私のデータは、アクティビティのメソッドを介して入力されます。問題は、どのようにしてこれらのオブジェクトを "Panel"の内側とonDraw()に入れるのですか? onDraw()内から、アクティビティ内のオブジェクト(私のGPSデータ)にアクセスできません。

SurfaceViewをインスタンスとして作成しようとしましたが、SurfaceViewを移動して別のクラスにしました(まだスレッドが入っています)。私はPanel内のインターフェースを実装しようとしました。これらは常にクラッシュし、私は見逃すことのできないデバッグデータを持っています。

ご迷惑をおかけして申し訳ございません。

+0

これらの解読不能なデバッグメッセージが実際に役立つかもしれません。投稿できますか? – espinchi

答えて

0

GPSデータをクラスfooにラップし、fooのインスタンスへの参照をPanel上のコンストラクタに渡すと、必要なものすべてを確保する必要があります。

+0

ありがとうございます。私はそこに何かが明白であると思った...私は特に経験はありませんし、コンストラクタにそのような方法でオーバーロードすることはできませんでした。それ。 – Tim

+0

これは動作しているようです!私はクラスgpsDataHolderを作成し、outer Activity(gpsコールバックがある場所)にholder.setData()を持ち、内側のSurfaceViewのonDrawにholder.getData()を持ち、 "Gulf"を匿名の内部クラス。あなたの助けをありがとう、もう一度ありがとう。 – Tim

0

内部クラスがActivityクラス内で宣言されている場合(gpsデータをリスニングする場合)、内部クラスはActivityクラスのメンバー変数にアクセスできる必要があります。 それほどOOではありませんが、うまくいくはずです。

+0

Panel(内部描画クラス)は、私が使用しているテンプレートでは匿名で、setContentView(new Panel(this))のActivityで作成されています。 – Tim

+0

私はPanel myPanel = new PanelとsetContentView(myPanel(this))を試しましたが、クラッシュしたこともあります。 – Tim

関連する問題