java - Android Studio : exchange data between classes

标签 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. 使用 DrawingView 中的函数 update(int, int)

最后,我不仅需要传输两个整数,还需要传输数组的内容: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

关于java - Android Studio : exchange data between classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40823340/

相关文章:

android - ListFragment 中没有加载圆圈

java - Gradle在构建期间将属性值或文件从gradle中排除,本地

java - 将Spring Boot从2.2.2升级到2.3.2时出现错误

Java 编程嵌套循环

android - 让我的应用出现在 YouTube 分享中?

android - 在 Android native 库中尝试 Catch 失败

java - 使用递归反转字符串

java - Java 如何处理单个 IF 语句中的多个条件

android - java.lang.InknownClassChangeError,将kotlin gradle插件升级到1.5.20后

android - 在处理程序中创建警报对话框