PJL是正确的。我使用了他的建议,这就是我所做的:
为片段定义了全局变量:
private final Object attachingActivityLock = new Object();
private boolean syncVariable = false;
已实施
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
synchronized (attachingActivityLock) {
syncVariable = true;
attachingActivityLock.notifyAll();
}
}
3。我在线程中包装了我需要在其上调用getActivity()的函数,因为如果它将在主线程上运行,我将在步骤4中阻塞该线程,并且永远不会调用onAttach()。
Thread processImage = new Thread(new Runnable() {
@Override
public void run() {
processImage();
}
});
processImage.start();
4。在需要调用getActivity()的函数中,使用了此函数(在调用getActivity()之前)
synchronized (attachingActivityLock) {
while(!syncVariable){
try {
attachingActivityLock.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
如果您有一些UI更新,请记住在UI线程上运行它们。我需要更新ImgeView,所以这样做:
image.post(new Runnable() {
@Override
public void run() {
image.setImageBitmap(imageToShow);
}
});
getActivity()
。另外,您如何实例化片段?您的layout.xml中有吗?