2016-11-26 5 views
0

(Android Studioの)クラス間でデータを交換する方法を学習したいと思います。Android Studio:クラス間でデータを交換する

1)GraficActivity.java:

public class GraficActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ImageView iv = (ImageView) findViewById(R.id.testview); 
     //not working:  iv.update(100,100); 
     DataHolder.setData(100, 100); 
    } 
} 

2)DrawingView.java:

public class DrawingView extends ImageView { 
    public DrawingView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    private int X=200; 
    private int Y=200; 
    //not working: X = DataHolder.getX(); 
    //not working: Y = DataHolder.getY(); 
    public void update(int dataX, int dataY) { 
     X=dataX; 
     Y=dataY; 
     this.invalidate(); 
    } 
    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint pinsel = new Paint(); 
     pinsel.setColor(Color.rgb(64, 64, 255)); 
     pinsel.setStrokeWidth(5); 
     canvas.drawLine(0, 0, X, Y, pinsel); 
    } 
} 

3)DataHolder.java:私は3つのJavaクラスを作成しているそのために

public class DataHolder { 
    private static int X; 
    private static int Y; 
    public static int getX() {return X;} 
    public static int getY() {return Y;} 
    public static void setData(int dataX, int dataY) {X = dataX; Y=dataY;} 
} 

私はDrawingViewをレイアウトに含めました(他のele main.xmlに次のコードを持つメント):

<de.carpelibrum.grafik.DrawingView 
    android:layout_width="match_parent" 
    android:layout_height="400dp" 
    android:background="#ffffff" 
    android:id="@+id/testview" /> 

アプリは原則的に動作しますが、私はGraficActivityからDrawingViewにデータを転送する方法を見つけることができませんでした。

私は2つの方法(上記のコードで示されるように)しようとした:機能DrawingViewupdate(int, int)でグローバル変数として別個DataHolderビア

  1. を。

最後に、2つの整数だけでなく、配列の内容:int data[][];も転送する必要があります。

どのように問題を解決するには?

ご協力いただきありがとうございます。

乾杯、 Kyriakos。

答えて

1

ImageViewupdate(int, int)がありません。 ID R.id.testViewに関連付けられたビューは、タイプDrawingViewにキャストする必要があります。その後update(int, int)は、コンパイル時に利用可能になる必要があります。

DrawingView iv = (DrawingView) findViewById(R.id.testview); 

また、あなたのDataHolderDrawingView両方は、位置データを格納していることを考えます。一つを選ぶ。データはDrawingViewインスタンスに固有である場合は、DataHolderは必要ありません。

0

完璧!ありがとうございました。データベースについて

は、私は、 "GraficActivity" に入れて "DataHolder" をsratchedし、 "更新" 機能にパラメータとしてポインタを使用:

"GraficActivity" に:

private int data[][]=new int[10][10]; 
data[0][0] = 200;  
data[0][1] = 100; 
iv.update(data); 

"DrawingView":

public void update(int[][] dataXY) { 
    X=dataXY[0][0]; 
    Y=dataXY[0][1]; 
    this.invalidate(); 
} 

ここではこれが有効な作業基準です。

乾杯、 Kyriakos。

関連する問題