我对ott+activity+fragment.
1 有疑问。我打开 Activity 并在 onCreate 中注册 otto。
Observer.getInstance().register(this);
2. 如果我的方法完成,我将向服务器发送请求
@Override
public void didScanBarcode(String barcode, String symbology) {
...
ItemApiConnector.me().getItem(cleanedBarcode);
}
3.在这个方法中等待
@Subscribe(MessageType.ITEM_SUCCESS)
public void getItemFromServer(Item item) {
Fragment fragment = ItemFragment.newInstance(item);
setFragment(fragment);
}
4. 我的片段
public class ItemFragment extends Fragment {
private Item item;
private TextView tvName;
private TextView tvPrice;
private ImageView itemImage;
private DisplayImageOptions options;
AnimateFirstDisplayListener animateFirstDisplayListener = new AnimateFirstDisplayListener();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.item_info, container, false);
Bundle bundle = getArguments();
item = (Item) bundle.getSerializable("item");
tvName = (TextView) rootView.findViewById(R.id.tvItemName);
tvPrice = (TextView) rootView.findViewById(R.id.tvPrice);
itemImage = (ImageView) rootView.findViewById(R.id.itemImage);
tvName.setText(item.getName());
tvPrice.setText("$"+item.getPrice());
options = ILOptions.getOption();
ImageLoader.getInstance().displayImage(item.getImage(), itemImage, options, animateFirstDisplayListener);
return rootView;
}
public static ItemFragment newInstance(Item item) {
ItemFragment f = new ItemFragment();
Bundle b = new Bundle();
b.putSerializable("item", item);
f.setArguments(b);
return f;
}
}
第一次一切正常。然后我关闭活动。再次打开。和一个错误
java.lang.RuntimeException: Could not dispatch event: class com.skip.client.models.Item to handler [EventHandler public void com.skip.client.customer.activities.ScanActivity.getItemFromServer(com.skip.client.models.Item)]: Can not perform this action after onSaveInstanceState
at com.skip.client.core.otto.Bus.throwRuntimeException(Bus.java:458)
at com.skip.client.core.otto.Bus.dispatch(Bus.java:388)
at com.skip.client.core.otto.Bus.dispatchQueuedEvents(Bus.java:369)
at com.skip.client.core.otto.SkipBus.post(SkipBus.java:52)
at com.skip.client.core.Observer.send(Observer.java:26)
at com.skip.client.connector.DefaultCallback.onSuccess(DefaultCallback.java:134)
at com.skip.client.connector.DefaultCallback.success(DefaultCallback.java:55)
at com.skip.client.connector.DefaultCallback.success(DefaultCallback.java:23)
at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1365)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1383)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:636)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:615)
at com.skip.client.customer.activities.ScanActivity.setFragment(ScanActivity.java:128)
at com.skip.client.customer.activities.ScanActivity.getItemFromServer(ScanActivity.java:135)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.skip.client.core.otto.EventHandler.handleEvent(EventHandler.java:89)
at com.skip.client.core.otto.Bus.dispatch(Bus.java:386)
at com.skip.client.core.otto.Bus.dispatchQueuedEvents(Bus.java:369)
at com.skip.client.core.otto.SkipBus.post(SkipBus.java:52)
at com.skip.client.core.Observer.send(Observer.java:26)
at com.skip.client.connector.DefaultCallback.onSuccess(DefaultCallback.java:134)
at com.skip.client.connector.DefaultCallback.success(DefaultCallback.java:55)
at com.skip.client.connector.DefaultCallback.success(DefaultCallback.java:23)
at retrofit.CallbackRunnable$1.run(CallbackRunnable.java:45)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)