Android Studio:在类

时间:2016-11-26 21:27:54

标签: java android

我想学习如何在类之间交换数据(在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的方法。

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

  1. 通过单独的DataHolder作为全局变量
  2. 使用update(int, int)中的DrawingView功能。
  3. 最后,我不仅需要传输两个整数,还需要传输数组的内容:int data[][];

    如何解决问题?

    提前感谢您的建议。

    干杯, KYRIAKOS。

2 个答案:

答案 0 :(得分:1)

ImageView没有方法update(int, int)。您应该将与ID R.id.testView相关联的视图投射到您的类型DrawingView。然后update(int, int)应该在编译时可用:

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

另外,请考虑您的DataHolderDrawingView两者存储位置数据。选一个。如果数据特定于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。