[英]Android: Passing data from Java file to an activity
我有一個Java文件,其中包含在活動Java中調用的Java函數。 但是我不知道如何將一些數據從Java函數文件傳遞到活動Java,以便可以在應用程序中顯示它們。
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嗎? 我嘗試了打算/捆綁,但似乎沒有用。 謝謝
您需要從視圖到活動的回調。
將接口添加到View實現中,並在需要時調用它:
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);
}
}
在您的活動中設置回調/接口:
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
}
});
}
}
您可以在FaceView
類中簡單地使用getter
方法。 由於您在DisplayActivity
有對該類的引用,因此可以簡單地調用此方法來傳遞數據。
因此,從您的評論開始,您需要傳遞cx
和cy
。 我認為這些是int坐標。 由於您只能在java方法中返回一個值,而您只有兩個值,因此我正在使用Point
。 但是您可以使用Array
或ArrayList
。 執行以下操作。
FaceView.java
private int cx;
private int cy;
public Point getCoordinates(){
return new Point(cx, cy);
}
DisplayActivity.java
final Point point = overlay.getCoordinates();
int cx = point.x;
int cy = point.y;
passing data from FaceView to DisplayActivity
技術上講passing data from FaceView to DisplayActivity
這不是passing data from FaceView to DisplayActivity
,而是fetching data of FaceView from DispalyActivity
。 如果您足夠,則可以使用此方法。 我從您的評論中建議這樣The reason for the data passing is that I will create a text view to display the data on the app
。
另一方面,如果要立即通知DisplayActivity
FaceView
的更改,則需要通過創建iterface為其設置偵聽器(請參閱DevrimTuncer的答案)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.