Android 在活动中使用回调
我们有一个Webservice类,它将WebserviceListener作为特定Webservice调用的回调。我的问题是Android可以重新创建我的活动(方向改变等),然后我在回调中有了旧的引用。当我尝试设置视图的可见性,或将隐藏标志设置为vaiAndroid 在活动中使用回调,android,web-services,android-activity,callback,Android,Web Services,Android Activity,Callback,我们有一个Webservice类,它将WebserviceListener作为特定Webservice调用的回调。我的问题是Android可以重新创建我的活动(方向改变等),然后我在回调中有了旧的引用。当我尝试设置视图的可见性,或将隐藏标志设置为vaisaveInstanceStatemethod时,它们都会重新创建。我应该如何解决这个问题 我的守则如下: public class UploadActivity extends Activity implements { private Bu
saveInstanceState
method时,它们都会重新创建。我应该如何解决这个问题
我的守则如下:
public class UploadActivity extends Activity implements {
private Button mButton;
private volatile boolean mHidden;
private class UploadWSListener extends WebServiceAdapter {
@Override
public void onComplete(Bundle bundle) {
mSuggestion = (Suggestion) bundle.getSerializable(WebService.BUNDLE_DATA);
if (mSuggestion.isAutomatic()) {
myHandler.sendEmptyMessage(1);
}
else {
myHandler.sendEmptyMessage(0);
}
}
@Override
public void onServerError(ErrorResult error, Bundle bundle) {
onError(error.getDebugInfo());
}
@Override
public void onError(WebServiceException wse, Bundle bundle) {
onError(wse.getMessage());
}
private void onError(String message) {
Log.w(TAG, "Error downloading suggestions. Error: " + message);
myHandler.sendEmptyMessage(-1);
}
}
private class PhotoUploadHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, "Handler is ivoked. What: " + msg.what);
switch (msg.what) {
case 0:
mButton.setText("Upload");
break;
case 1:
mButton.setVisibility(View.GONE);
mHidden = true;
break;
case -1:
Toast.makeText(PhotoUploadActivity.this, "Network error", Toast.LENGTH_LONG).show();
finish();
break;
}
Log.i(TAG, "Handler with " + msg.what + " run.");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.i(TAG, "onSaveInstanceState hidden:" + mHidden);
super.onSaveInstanceState(outState);
// outState.putBoolean("hide", mButton.getVisibility() == View.GONE);
outState.putBoolean("hide", mHidden);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState != null && savedInstanceState.getBoolean("hide")) {
mButton.setVisibility(View.GONE);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myHandler = new UploadHandler();
Model model = Model.instance(getApplicationContext());
WebService service = model.getWebService();
if (Model.u) {
Model.u = false;
service.getSuggestions(new UploadWSListener(), Prefs.getUserToken(getApplicationContext()), getLatitude(),getLongitude(), getAltitude());
}
}
}
我的主要问题是:
- 如何将此回调设计用于活动?(我对设计非常着迷)
- 如果视图是不可预测地重新创建的,那么在我的活动中将视图作为实例变量保存,或者仅仅通过
获取视图,这是否明智findViewByID
在活动中保留视图是可以的,因为当活动被销毁时,视图将被释放/销毁。如果您必须多次访问它们,则可以将它们作为类成员保留,因为当布局非常深入时,通过findViewByID()获取它们可能会非常昂贵 我自己解决了这个问题,但我也没有找到更好的解决办法,所以答案是完全可以接受的。谢谢你的回复。