我想学习如何在类之间(在Android Studio中)交换数据。
为此,我创建了三个Java类:

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:

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,并在main.xml中添加了以下代码:

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


该应用程序原则上可以运行,但是我找不到将数据从GraficActivity传输到DrawingView的方法。

我尝试了两种方法(如上面的代码所示):


通过单独的DataHolder作为全局变量
update(int, int)中使用功能DrawingView


最后,我不仅需要传输两个整数,还需要传输数组的内容:int data[][];

如何解决问题?

预先感谢您的建议。

干杯,
基里亚科斯。

最佳答案

ImageView没有方法update(int, int)。您应该将与ID R.id.testView关联的View强制转换为类型DrawingView。然后update(int, int)应该在编译时可用:

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


另外,请考虑您的DataHolderDrawingView都在存储位置数据。选一个。如果数据特定于DrawingView的实例,则不需要DataHolder

10-06 01:40