java - Android:将数据从 Java 文件传递​​到 Activity

标签 java android

我有一个 Java 文件,其中包含在 Java Activity 中调用的 Java 函数。 但是我不知道如何将一些数据从 Java 函数文件传递到 Java Activity ,以便我可以在应用程序中显示它。

Java函数文件(FaceView.java)中的一些编码

public class FaceView extends View {

private FaceListener mFaceListener;

interface FaceListener {
     void handleData(int[] cxArr, int[] cyArr);    
}

public void setFaceListener(FaceListener faceListener) {
    this.mFaceListener = faceListener;
}

private int cx;
private int cy;
private int[] cxArr;
private int[] cyArr;

private void drawFaceAnnotations(Canvas canvas, double scale) {
    for (int i = 0; i < mFaces.size(); ++i) {
        Face face = mFaces.valueAt(i);

        for (Landmark landmark : face.getLandmarks()) {
            cx = (int) (landmark.getPosition().x * scale);
            cy = (int) (landmark.getPosition().y * scale);
            canvas.drawCircle(cx, cy, 5, paint);
            cxArr[i] = cx;
            cyArr[i] = cy;
            mFaceListener.handleData(cxArr,cyArr);
        }
}
    }
}

Activity java 文件中的代码 (DisplayActivity.java)

 overlay.setFaceListener(new FaceView.FaceListener() {
 public void handleData(int[] cxArr, int[] cyArr) {

 System.out.println(cxArr[1]+" "+cyArr[1]);
     }
  });

有人知道如何将数据从 FaceView.java 传递到 DisplayActivity.java 吗? 我尝试了 Intent/bundle ,但似乎不起作用。谢谢

最佳答案

您需要从 View 到 Activity 的回调。

向您的 View 实现添加一个接口(interface),并在需要时调用它:

public class FaceView extends View {

    private FaceListener mFaceListener;

    interface FaceListener {
        public void handleData(Integer[] cxArr, Integer[] cyArr);
    }

    public void setFaceListener(FaceListener faceListener) {
        this.mFaceListener = faceListener;
    }


    private void drawFaceAnnotations(Canvas canvas, double scale) {
        // your code here
        // notify listener

       List<Integer> cxList = new ArrayList<Integer>();
       List<Integer> cyList = new ArrayList<Integer>(); 

       for (int i = 0; i < mFaces.size(); ++i) {
           Face face = mFaces.valueAt(i);

           for (Landmark landmark : face.getLandmarks()) {
                cx = (int) (landmark.getPosition().x * scale);
                cy = (int) (landmark.getPosition().y * scale);
                canvas.drawCircle(cx, cy, 5, paint);

                cxList.add(cx);
                cyList.add(cy);

            }
        }

        Integer[] cxArr = cxList.toArray(new Integer[cxList.size()]);
        Integer[] cyArr = cyList.toArray(new Integer[cyList.size()]);

        mFaceListener.handleData(cxArr,cyArr);
    }
}

在您的 Activity 中设置回调/接口(interface):

public class DisplayActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // your code here
        FaceView overlay = (FaceView) findViewById(R.id.faceView);
        overlay.setFaceListener(new FaceView.FaceListener(){
             public void handleData(int[] cxArr, int[] cyArr) {
                 // TODO: handle faces array here
             } 
        });
    }
}

关于java - Android:将数据从 Java 文件传递​​到 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375900/

相关文章:

java - 为什么迭代映射比迭代列表慢?

java - 覆盖 Android 中的上下文菜单颜色

java - 空指针异常无法修复

java - 当数组中出现某个字符时,如何为整数赋值?

android - 使用 setSelection(position) 翻转图库 View

android - Android同时在不同的耳机上播放两首不同的歌曲

java - FrameLayout 无法转换为 AbsListView Layout Params

java - 添加 2 个或更多 .jar 文件时出错。在模块 (Android) 中发现重复的类。有没有办法合并或排除重复的类?

Java 不停止发送电子邮件 (JAvaMail Eclipse)

java - 在 Android 中,我可以在没有 Intent 的情况下在 Activity 之间移动对象吗?