我想学习如何在类之间(在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);
另外,请考虑您的
DataHolder
和DrawingView
都在存储位置数据。选一个。如果数据特定于DrawingView
的实例,则不需要DataHolder
。