我想学习如何在类之间交换数据(在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[][];
。
如何解决问题?
提前感谢您的建议。
干杯, KYRIAKOS。
答案 0 :(得分:1)
ImageView
没有方法update(int, int)
。您应该将与ID R.id.testView
相关联的视图投射到您的类型DrawingView
。然后update(int, int)
应该在编译时可用:
DrawingView iv = (DrawingView) findViewById(R.id.testview);
另外,请考虑您的DataHolder
和DrawingView
是两者存储位置数据。选一个。如果数据特定于DrawingView
的实例,则您不需要DataHolder
。
答案 1 :(得分:0)
完美!谢谢。
关于数据库,我把它放在“GraficActivity”中,sratched“DataHolder”,并在“update”函数中使用指针作为参数:
“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。